'передайте параметр ссылкой' в Ruby?

Это будет выглядеть так же, как и ключевое слово с таким популярным в flash и vbscript. Это метод изменения того, что this есть, и не более того.

26
задан Ry- 6 July 2014 в 14:48
поделиться

3 ответа

Можно выполнить это путем явной передачи в текущей привязке:

def func(x, bdg)
  eval "#{x} += 1", bdg
end

a = 5
func(:a, binding)
puts a # => 6
31
ответ дан jmah 28 November 2019 в 06:28
поделиться

Ruby не поддерживает "передачу ссылкой" вообще. Все - объект, и ссылки на те объекты всегда передаются значением. На самом деле в Вашем примере Вы передаете копию ссылки на эти Fixnum Объект значением.

проблема с Вашим кодом, это x += 1 не изменяет переданный Fixnum Объект, но вместо этого создает абсолютно новый и независимый объект.

я думаю, программисты Java звонили бы Fixnum объекты неизменный .

20
ответ дан Christoph Schiessl 28 November 2019 в 06:28
поделиться

В Ruby Вы не можете передать параметры ссылкой. Для Вашего примера необходимо было бы возвратить новое значение и присвоить его переменной a или создать новый класс, который содержит значение, и раздайте экземпляр этого класса. Пример:

class Container
attr_accessor :value
 def initialize value
   @value = value
 end
end

def func(x)
  x.value += 1
end

a = Container.new(5)
func(a)
puts a.value
11
ответ дан muesan 28 November 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: