У меня есть метод, в котором я хочу изменить число ...
Числа являются неизменяемыми, вы не можете их изменить. 1
всегда будет 1
.
Я думаю, что вы на самом деле хотите назначить новое значение переменной number
в вашем методе и переменной number
вне вашего метода.
Но это невозможно в Ruby. Переменные внутри ваших методов имеют свою собственную область видимости, и изменения не распространяются за пределы. Поэтому присвоение нового объекта переменной внутри вашего метода не повлияет на «внешние» переменные.
Есть ли способ достичь этого в Ruby ...
Я вижу несколько значений и методов, которые работают с этими значениями. Почему бы не переместить их в класс как переменные экземпляра и методы экземпляра?
class Foo
attr_reader :total, :unaccounted_for
def initialize(total, unaccounted_for)
@total = total
@unaccounted_for = unaccounted_for
end
def accounted_for
total - unaccounted_for
end
def category_a_reaccounted
25 # actually calculated
end
def category_b_reaccounted
20 # actually calculated
end
def distributed_unaccounted
total_reaccounted = category_a_reaccounted + category_b_reaccounted
@unaccounted_for -= total_reaccounted
end
end
Использование, основанное на вашем примере:
foo = Foo.new(1000, 100)
foo.unaccounted_for #=> 100
foo.accounted_for #=> 900
foo.distributed_unaccounted
foo.unaccounted_for #=> 55
foo.accounted_for #=> 945