可能重复:
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实际上有用?
编辑 - 刚刚在“The Ruby Programming Language”一书中遇到过这个问题:
另一种防止复制的技巧 对象是简单地使用undef 删除克隆和dup方法。然而 另一种方法是重新定义 克隆和重复方法使他们 引发错误的异常 特别说出来的消息 不允许复制。这样的 错误消息可能会有所帮助 正在使用你的班级的程序员。
答案 0 :(得分:6)
我只能说我5年来从未使用它。也许更有用的是,通过整个rails的源代码只显示7个实例,并且它们都与元编程相关。 (undef_method在22处有更多实例)。它似乎对测试带有和不带模块的类的行为很有用。
希望有人可以为它指出一些更常规的用途。
修改强> 请参阅上一个问题:undef - Why would you want to undefine a method in ruby?
答案 1 :(得分:6)
阻止子类调用超类中定义的方法(这实际上是在mongrel的setup.rb
中使用)(释义):
class Item
def set
do_something
end
end
class ExecItem < Item
undef set
end
虽然我猜undef_method
会产生同样的效果。