Соединить с рубином

Скажи, что у меня есть

arr = [1,2,3]

Как я могу изменить этот метод, чтобы он добавлял каждый аргумент в массив?

def add(*number)
  arr << *number
end

Так add(4,5,6) производит:

arr #=> [1,2,3,4,5,6]

3 ответа

Решение

Принимая аргументы через splat, они всегда будут массивом. Таким образом, вы можете просто добавить два массива вместе.

def add(*numbers)
  arr + numbers
end

Использование concat:

def add(*nums)
  arr.concat nums
end

Или же +:

def add(*nums)
  arr + nums
end
$arr = [1,2,3]

def add(*number)
  $arr.concat number
end

add(4,5,6)

$arr #=> [1,2,3,4,5,6]

Замечания: concat изменяет объект, на котором он работает ($arr). Плюс (+) не.

Как упоминает Жестянщик, вы не хотите использовать глобал для этого. Лучше просто сделать

arr.concat [4,5,6]

вне вызова функции. Еще лучше:

arr += [4,5,6]
Другие вопросы по тегам