Это будет выглядеть так же, как и ключевое слово с таким популярным в flash и vbscript. Это метод изменения того, что this
есть, и не более того.
Можно выполнить это путем явной передачи в текущей привязке:
def func(x, bdg)
eval "#{x} += 1", bdg
end
a = 5
func(:a, binding)
puts a # => 6
Ruby не поддерживает "передачу ссылкой" вообще. Все - объект, и ссылки на те объекты всегда передаются значением. На самом деле в Вашем примере Вы передаете копию ссылки на эти Fixnum
Объект значением.
проблема с Вашим кодом, это x += 1
не изменяет переданный Fixnum
Объект, но вместо этого создает абсолютно новый и независимый объект.
я думаю, программисты Java звонили бы Fixnum
объекты неизменный .
В 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