配列、単一要素、または nil を指定すると、配列が取得されます。後者の 2 つは、それぞれ単一要素配列と空の配列です。
私は、Ruby が次のように動作すると誤って考えました。
[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
しかし、実際に得られるものは次のとおりです。
[1,2,3].to_a #= [1,2,3] # Hooray
1.to_a #= NoMethodError # Do not want
nil.to_a #= [] # Hooray
したがって、これを解決するには、別のメソッドを使用するか、使用する予定のすべてのクラスの to_a メソッドを変更してメタ プログラムを作成する必要があります。これは私にとっては選択肢ではありません。
したがって、メソッドは次のとおりです。
result = nums.class == "Array".constantize ? nums : (nums.class == "NilClass".constantize ? [] : ([]<<nums))
問題は、それが少し混乱していることです。これを行うエレガントな方法はありますか?(これがこの問題を解決するための Ruby っぽい方法である場合、私は驚くでしょう)
これにはどのようなアプリケーションがありますか? なぜ配列に変換するのでしょうか?
Rails の ActiveRecord では、say を呼び出すと、user.posts
投稿の配列、単一の投稿、または nil のいずれかが返されます。この結果に作用するメソッドを作成する場合、メソッドが配列を受け取ると仮定するのが最も簡単です。配列には、0 個、1 個、または多数の要素が含まれる可能性があります。方法の例:
current_user.posts.inject(true) {|result, element| result and (element.some_boolean_condition)}