0

メソッドを使用して変数を変更し、その変更された値に設定している多くの状況に遭遇します。

value = "string"
value.modify #=> "new string"
value #=> "string"
value = value.modify
value #=> "new string"

多くのRubyメソッドには、value.modify!まさにそれを行うバリアントがあることに気づきました。

Rubyにはそれを行うための速記がありvalue = value.modifyますか?また、自分でmodify!メソッドを作成した場合、どのように実装しますか?

4

1 に答える 1

2

それは本当にクラスがどのように実装されているかに依存します。これらのbangメソッドは、SymbolsやFixnumsなどの不変オブジェクトでは実際には不可能です。配列のような列挙型の場合、replace()次のような任意のbangメソッドを記述できるメソッドがあります。

def bang()
  replace(this.non_bang)
end

多くのbangメソッドのソースを見ると、通常、bangメソッドにはコードの要点が含まれており、非bangメソッドは単にオブジェクトを呼び出すdup()clone()、オブジェクトを呼び出してから、このようなメソッドのbangバージョンを呼び出します。 :

def non_bang(*args)
  clone.bang(*args)
end
于 2012-07-07T23:42:17.560 に答える