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
この方法はナイーブすぎるので、副作用が大きすぎて使い物にならない可能性が高いと思う。どこかに使い易い形でのライブラリがないのかな。