Что обозначает "*" перед аргументом?

Когда символ "*" используется в списке формальных параметров, это значит, что любое количество аргументов может быть передано в метод, они будут собраны в массив и присвоены переменной с символом "*".

  def foo(prefix, *all)
    for e in all
      print prefix, e, " "
    end
  end

  foo("val=", 1, 2, 3)  #=>  val=1 val=2 val=3

В вызове метода "*" используется для разворачивания массива и передачи его элементов как отдельных аргументов.

  a = [1, 2, 3]
  foo(*a)

Символ "*" может предшествовать последнему аргументу


  • Левая часть множественного присваивания

  • Правая часть множественного присваивания

  • Определение формальных аргументов метода

  • Сами аргументы в вызове метода

  • В инструкции when конструкции case

Например:

  x, *y = [7, 8, 9]
  puts x            #=> 7
  puts y            #=> 8
                        9
  x,    = [7, 8, 9]
  puts x            #=> 7
  x     = [7, 8, 9]
  puts x            #=> 7
                        8
                        9

Вход для пользователей