Re: https://stackoverflow.com/a/6528257 (мне не хватало репутации, чтобы комментировать на момент написания статьи)
Ах, но Йорг, если вы на самом деле манипулируете аргументом, вместо присвоения ему нового объекта, метод ведет себя по-другому. Использование .replace
вместо =
дает вам следующее:
def is_Ruby_pass_by_value_or_reference?(parameter)
parameter.replace 'Ruby is pass-by-reference.'
end
var = 'Ruby is pass-by-value.'
is_Ruby_pass_by_value_or_reference?(var)
puts var
# Ruby is pass-by-reference.
На самом деле, давайте уточним немного больше, просто чтобы показать разницу:
def is_Ruby_pass_by_value_or_reference?(parameter)
parameter.replace 'Ruby is pass-by-reference.'
parameter = "This assigns a whole new object to 'parameter', but not to 'var'."
puts parameter
end
var = 'Ruby is pass-by-value.'
is_Ruby_pass_by_value_or_reference?(var)
# This assigns a whole new object to 'parameter', but not to 'var'.
puts var
# Ruby is pass-by-reference.