скажи, что у меня есть
arr = [1,2,3]
Как я могу изменить этот метод, чтобы он добавлял каждый аргумент в массив?
def add(*number)
arr << *number
end
Итак, add(4,5,6)
производит:
arr #=> [1,2,3,4,5,6]
скажи, что у меня есть
arr = [1,2,3]
Как я могу изменить этот метод, чтобы он добавлял каждый аргумент в массив?
def add(*number)
arr << *number
end
Итак, add(4,5,6)
производит:
arr #=> [1,2,3,4,5,6]
При приеме аргументов через splat они всегда будут массивом. Таким образом, вы можете просто сложить два массива вместе.
def add(*numbers)
arr + numbers
end
arr
будет действителен внутри def
? arr
не будет распознаваться как локальная переменная для def add
.
- person Arup Rakshit; 01.01.2014
undefined local variable or method 'arr' for main:Object (NameError)
- person Matt; 01.01.2014
arr
не имеет отношения к этому вопросу.
- person Alex Wayne; 01.01.2014
#<<
добавляет, а #+
создает новый массив.
- person jonahb; 01.01.2014
<<
добавляет отдельные элементы. Используйте arr += [4,5,6]
для добавления всего массива.
- person Matt; 01.01.2014
Используйте 1_:
def add(*nums)
arr.concat nums
end
Or +
:
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]
$
. Это, по крайней мере, показывает, как сделать это правильно так, как этого хочет OP. В любом случае ответ обновлен, чтобы ответить на ваш комментарий.
- person Matt; 01.01.2014