Rubyでメソッドの上書きを禁止する方法
Rubyを採用しない理由でRubyにメソッドの上書きを禁止する構文を導入したらどうかという提案があった。
上書きを禁止したい理由はもっともだと思う。ただ、わざわざ構文を用意しなくとも、method_addedメソッドを利用すれば上書きを禁止できるのではと思った。例えば、次のような方法があると思う。
class Module
@@method_memory = {}
def method_added(name)
@@method_memory[self] ||= {}
if @@method_memory[self].has_key?(name)
raise "cannot overwrite the existing method '#{name}'"
else
@@method_memory[self][name] = true
end
end
end
class Hoge
def a
puts 10
end
end
class Hoge
def a # ->例外が発生する
puts 20
end
end
この方法はナイーブすぎるので、副作用が大きすぎて使い物にならない可能性が高いと思う。どこかに使い易い形でのライブラリがないのかな。