可能重复:
undef - Why would you want to undefine a method in ruby?
有人能为红宝石中的undef设计出实用的用途吗?我来自javascript和python等没有内置它的语言。当然,您可以在javascript这样的语言中模拟它:
var obj = { func:function(){alert("works")} }
obj.func() // -> "works"
delete(obj["func"])
obj.func() //->obj.func() is not a function但我从来没有真正用过它。在某些常见的情况下,undef实际上是有用的吗?
编辑 --在“Ruby”一书中看到了这一点:
防止对象复制的另一种技术是使用undef简单地删除克隆方法和dup方法。还有一种方法是重新定义克隆方法和dup方法,这样它们就会引发一个异常,其中包含一个错误消息,该错误消息明确表示不允许复制。这样的错误消息可能有助于使用您的类的程序员。
。
发布于 2011-01-14 22:23:50
我只能说我已经5年没有用过它了。也许更有用的是,浏览整个rails源代码只显示了7个实例,它们都与元编程相关。(undef_method在22岁时有更多的实例)。它似乎对测试有和没有模块混合的类的行为很有用。
希望有人能指出它的一些更传统的用途。
编辑参见前面的问题:undef - Why would you want to undefine a method in ruby?
发布于 2011-01-15 01:36:40
阻止子类调用超类中定义的方法(这实际上用于mongrel的setup.rb) (转述):
class Item
def set
do_something
end
end
class ExecItem < Item
undef set
end不过,我想undef_method也会有同样的效果。
https://stackoverflow.com/questions/4696507
复制相似问题