🌟

[Feature #19832] 対象のメソッドが『破壊的な変更があるか』『ないか』を判定するためのメソッドを追加する提案

2024/05/04に公開

[Feature #19832] Method#destructive?, UnboundMethod#destructive?

  • 対象のメソッドが『破壊的な変更があるか』『ないか』を判定するためのメソッドを追加する提案
String.instance_method(:<<).destructive? # => true
String.instance_method(:+).destructive? # => false
  • コメントだと Ractor や JIT で役に立つケースがあると書いてあるんですが同時にそれを担保するのは難しいとも書かれています
  • いまは『破壊的』をどう機械的に判定するのか、『破壊的』とはどういう状態を指すのか、どういう時に利用するのかなどが議論されています
  • あとは元コメントには private みたいに宣言式にする案とかも書かれていますね
class A
  def foo; ... end
  def bar; ... end
  def baz; ... end

  non_destructive :foo, :baz
  destructive :bar
end
  • こっちの方が管理しやすそうではあるけど『破壊的でないこと』をどこまで担保するべきなのかはむずそうですねえ
    • ネストしてメソッドを呼び出した場合とか特に
    • 標準出力するだけでも『破壊的』として扱われるとか
GitHubで編集を提案

Discussion