配列、単一の要素、または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)}
==
では=
、の代わりに、と思いますよね?
[1,2,3].to_a
ません[[1,2,3]]
!戻ります[1,2,3]
。
user.posts
単一の投稿を返すことはありません。少なくとも、私はそれを見たことがない。