Что делает оператор splat, когда он не имеет имени переменной? - программирование
Подтвердить что ты не робот

Что делает оператор 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

Если этот вопрос уже не задан, может кто-нибудь объяснить, что делает этот синтаксис?

4b9b3361

Ответ 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.