6

以下のすべての値により、構文bでメソッドを呼び出すことができます。*args

def some_method(a)
   puts a
end

b = 1
some_method(*b) # => 1

b = false
some_method(*b) # => false

b = "whatever"
some_method(*b) # => "whatever"

では、引数エラーではなく、nilを取得することを期待していました:nil

b = nil
some_method(*b) # => ArgumentError: wrong number of arguments (0 for 1)

ここで何が起きてるの?

4

1 に答える 1

7

オブジェクトが配列ではなく、その上で定義されている場合、 splat 演算子*は最初にオブジェクトに適用されます。数値、falseclass、および文字列については、定義されておらず、そのまま残ります。nilclass の場合、が定義され、空の配列を返します。それらがスプラッティングされると、数値、falseclass、および文字列はそのまま残りますが、空の配列は何もなくなります。この質問への回答も参照してください。to_ato_ato_ato_a

于 2014-06-02T02:50:55.753 に答える