Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby undef的实际应用_Ruby_Undef - Fatal编程技术网

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