🌟
[Feature #19832] 対象のメソッドが『破壊的な変更があるか』『ないか』を判定するためのメソッドを追加する提案
[Feature #19832] Method#destructive?, UnboundMethod#destructive?
- 対象のメソッドが『破壊的な変更があるか』『ないか』を判定するためのメソッドを追加する提案
String.instance_method(:<<).destructive? # => true
String.instance_method(:+).destructive? # => false
- コメントだと Ractor や JIT で役に立つケースがあると書いてあるんですが同時にそれを担保するのは難しいとも書かれています
- いまは『破壊的』をどう機械的に判定するのか、『破壊的』とはどういう状態を指すのか、どういう時に利用するのかなどが議論されています
- CRuby で実装しているメソッドの関数内で
rb_check_frozen
が呼ばれているかどうかで判定するみたいな話もあり面白い - https://bugs.ruby-lang.org/issues/19832#note-10
- CRuby で実装しているメソッドの関数内で
- あとは元コメントには
private
みたいに宣言式にする案とかも書かれていますね
class A
def foo; ... end
def bar; ... end
def baz; ... end
non_destructive :foo, :baz
destructive :bar
end
- こっちの方が管理しやすそうではあるけど『破壊的でないこと』をどこまで担保するべきなのかはむずそうですねえ
- ネストしてメソッドを呼び出した場合とか特に
- 標準出力するだけでも『破壊的』として扱われるとか
Discussion