Все значения для 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)
Что здесь происходит?
b = *nil; method(b)
, и он отлично работает. - person Mike H-R   schedule 02.06.2014method
. он творит жуткие вещи с моимpry
(начинает печатать:inspect
). Я предполагаю, что вы не будете делать это нормально, но я подумал, что это интересно, поэтому я подумал, что упомяну об этом, мне было бы интересно, если бы кто-нибудь мог сказать мне, что является причиной этого. - person Mike H-R   schedule 02.06.2014method(*b)
. И да, метод имени для метода не годится. Был просто примером здесь. - person Automatico   schedule 02.06.2014b= *b
, так как это принудитnil
в[]
, и массивы останутся прежними. - person Mike H-R   schedule 02.06.2014b= *b; some_method(*b)
? Это может сработать. - person Automatico   schedule 02.06.2014nil
рубина), но это, по крайней мере, решение. :) - person Mike H-R   schedule 02.06.2014b = [] if b == nil
на самом деле было бы понятнее и лучше, но да. Что происходит с нулем? - person Automatico   schedule 02.06.2014Object#method
поэтому вызов собственного методаmethod
не сработает. - person mu is too short   schedule 02.06.2014:inspect
каждый раз, когда печатается строка. - person Mike H-R   schedule 02.06.2014