次のように、オブジェクトが可変かどうかを判断するメソッドはありmutable?
ますか?そうでない場合、それを実装するための最良の方法は何ですか?
"abcde".mutable? # => true
0.mutable? # => false
enumerated.inject(initial){...}
muに答えるには短すぎて、dbenhurの質問ですが、またはの構文は好きではありませんenumerated.each_with_object(initial){...}
。レシーバーと引数を逆にするメソッドが必要でした。また、さまざまなクラスで使用できるようにしたかったのです。私が持っているように:
initial.my_new_method(enumerated){...}
0.my_new_method(1..10){|sum, i| sum + i} # => 55
"a".my_new_method(b: 3, c: 4){|s, (k, v)| s + k.to_s * v} # => "abbbcccc"
これにより、レシーバーの修正バージョンが返され、概念的にはより自然になります。そして、でmy_new_method
、私はそれが非破壊的であることを望みました。レシーバーが可変の場合、破壊的なバージョンをさらに定義したかった
initial.my_new_method!(enumerated){...}
"a".my_new_method!(b: 3, c: 4){|s, (k, v)| s << k.to_s * v} # => "abbbcccc"
したがって、受信機が可変であるかどうかを検出する必要があります。凍っていても構いません。破壊的なバージョンのメソッドをフリーズしたオブジェクトで使用すると、単にエラーが発生します。それは何も悪いことではありません。