Diberikan sebuah array, satu elemen, atau nil, dapatkan sebuah array - dua yang terakhir masing-masing menjadi array elemen tunggal dan sebuah array kosong.
Saya salah mengira Ruby akan bekerja seperti ini:
[1,2,3].to_a #= [1,2,3] # Already an array, so no change
1.to_a #= [1] # Creates an array and adds element
nil.to_a #= [] # Creates empty array
Tapi yang sebenarnya Anda dapatkan adalah:
[1,2,3].to_a #= [1,2,3] # Hooray
1.to_a #= NoMethodError # Do not want
nil.to_a #= [] # Hooray
Jadi untuk mengatasi ini, saya perlu menggunakan metode lain, atau saya bisa meta program dengan memodifikasi metode to_a dari semua kelas yang ingin saya gunakan - yang bukan merupakan pilihan bagi saya.
Jadi Metode itu adalah:
result = nums.class == "Array".constantize ? nums : (nums.class == "NilClass".constantize ? [] : ([]<<nums))
Masalahnya adalah ini agak berantakan. Adakah cara elegan untuk melakukan ini? (Saya akan kagum jika ini adalah cara Ruby-ish untuk menyelesaikan masalah ini)
Aplikasi apa yang dimilikinya? Mengapa bahkan mengonversi ke array?
Di Rails 'ActiveRecord, memanggil say, user.postsakan mengembalikan array posting, posting tunggal, atau nil. Saat menulis metode yang bekerja pada hasil ini, paling mudah mengasumsikan bahwa metode tersebut akan mengambil array, yang mungkin memiliki nol, satu, atau banyak elemen. Metode contoh:
current_user.posts.inject(true) {|result, element| result and (element.some_boolean_condition)}
==bukan =, kan?
[1,2,3].to_atidak tidak kembali [[1,2,3]]! Ia kembali [1,2,3].
user.poststidak boleh mengembalikan satu pun postingan. Setidaknya, saya tidak pernah melihatnya.