Ruby undef的实际应用
可能重复:Ruby undef的实际应用,ruby,undef,Ruby,Undef,可能重复: 有人能在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 但我从来没有真正用过。在某些常见情况下,u
有人能在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方法,以便
引发带有错误的异常
特别说明
不允许复制。这样的
错误消息可能有助于
使用您的类的程序员
我只能说我已经5年没用过了。也许更有用的是,浏览整个rails源代码只显示7个实例,它们都与元编程相关。(undef_方法在22处有更多实例)。它对于测试混合了模块和没有模块的类的行为似乎很有用 希望有人能指出它的一些更传统的用途 编辑
请参阅前面的问题:阻止子类调用超类中定义的方法(这实际上在mongrel的
setup.rb中使用)(意译):
类项目
def套件
做点什么
结束
结束
类ExecItem
虽然我猜undef\u方法
也会有同样的效果。Hmm,很有趣。所以我们有1:从类中删除一个方法来运行一个缺少该方法的测试。2:从类中删除所有方法以创建完全空白的代理类。和3:一些可怕的基于条件的功能。我会再等一段时间来接受这个答案,看看是否有人会给出其他回应,但我相信这就是答案。我会投你一票,但显然我还不能。请看我对下面答案的回答。
class Item
def set
do_something
end
end
class ExecItem < Item
undef set
end