Что делает оператор splat, когда он не имеет имени переменной?
Я просматривал кодовую базу Camping
, когда увидел конструктор с использованием такого символа:
class Fruit
def initialize(*)
end
end
Я попытался найти "splat без имени переменной" на этом сайте и Google, но я не смог найти ничего, кроме информации о том, что splat используется с именем переменной, подобным этому *some_var
, но не без него. Я попытался сыграть с этим на реплике, и я попробовал такие вещи, как:
class Fruit
def initialize(*)
puts *
end
end
Fruit.new('boo')
но это исходит из этой ошибки:
(eval):363: (eval):363: compile error (SyntaxError)
(eval):360: syntax error, unexpected kEND
(eval):363: syntax error, unexpected $end, expecting kEND
Если этот вопрос уже не задан, может кто-нибудь объяснить, что делает этот синтаксис?
Ответы
Ответ 1
Обычно такой знак используется для указания аргументов, которые не используются методом, но которые используются соответствующим методом в суперклассе. Вот пример:
class Child < Parent
def do_something(*)
# Do something
super
end
end
Это говорит о вызове этого метода в супер классе, передав ему все параметры, которые были предоставлены исходному методу.
источник: Программирование ruby 1.9 (Дейв Томас)
Ответ 2
Он ведет себя аналогично * args, но вы не можете обратиться к нему в тело метода
def print_test(a, *)
puts "#{a}"
end
print_test(1, 2, 3, 'test')
Это напечатает 1.