破壊的なメソッドをチェーンして変数の値を1つ変更する方法をルビーで探していますが、というエラーが発生しますCan't change the value of self
。これはRubyでは不可能なことですか?
guesses_left = 3
class Integer
def decrement_guess_count!
self -= 1
end
end
guesses_left.decrement_guess_count!
破壊的なメソッドをチェーンして変数の値を1つ変更する方法をルビーで探していますが、というエラーが発生しますCan't change the value of self
。これはRubyでは不可能なことですか?
guesses_left = 3
class Integer
def decrement_guess_count!
self -= 1
end
end
guesses_left.decrement_guess_count!
これは仕様によるものです。これは整数に固有のものではなく、すべてのクラスがそのように動作します。一部のクラス(たとえば)では、インスタンスの状態String
を変更できますが(これは破壊的操作と呼ばれます)、オブジェクトを完全に置き換えることはできません。整数の場合、状態さえも変更できません。整数はありません。
もし私たちがそのようなことを喜んで許すなら、それはたくさんの難しい質問を提起するでしょう。たとえば、参照をfoo
参照している場合bar1
は、これをに置き換えますbar2
。foo
指さし続ける必要がありbar1
ますか?なんで?なぜそうすべきではないのですか?bar2
タイプが完全に異なる場合、のユーザーはbar1
これにどのように対応する必要がありますか?等々。
class Foo
def try_mutate_into another
self = another
end
end
f1 = Foo.new
f2 = Foo.new
f1.try_mutate_into f2
# ~> -:3: Can't change the value of self
# ~> self = another
# ~> ^
この操作が可能な言語を見つけるようにあなたに挑戦します。:)