任何人都可以在红宝石中为undef布置实际用途吗?我来自javascript和python这样没有内置的语言.你当然可以用javascript之类的语言模拟它:
var obj = { func:function(){alert("works")} }
obj.func() // -> "works"
delete(obj["func"])
obj.func() //->obj.func() is not a function
Run Code Online (Sandbox Code Playgroud)
但我从来没有真正使用过它.是否有一些常见的情况,其中undef实际上有用?
编辑 - 刚刚在"红宝石编程语言"一书中遇到过这个问题:
另一种防止复制对象的技术是使用undef来简单地删除clone和dup方法.另一种方法是重新定义clone和dup方法,以便它们引发异常,并显示一条错误消息,明确指出不允许复制.这样的错误消息可能对正在使用您的类的程序员有所帮助.
我只能说我5年来从未使用它.也许更有用的是,通过整个rails的源代码只显示7个实例,并且它们都与元编程相关.(undef_method在22处有更多实例).它似乎对测试带有和没有模块混合的类的行为很有用.
希望有人可以为它指出一些更常规的用途.
编辑 请参阅前一个问题:undef - 为什么要在ruby中取消定义方法?
阻止子类调用超类中定义的方法(这实际上是在mongrel中使用的setup.rb)(释义):
class Item
def set
do_something
end
end
class ExecItem < Item
undef set
end
Run Code Online (Sandbox Code Playgroud)
虽然我猜undef_method也会有同样的效果.