可能的重复:
UNDEF-您为什么要在Ruby中不确定一种方法?

任何人都可以在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实际上是有用的?

编辑 - 刚刚在“红宝石编程语言”一书中遇到了这一点:

防止对象复制的另一种技术是使用UNDEF简单地删除克隆和DUP方法。另一种方法是重新定义克隆和DUP方法,以便他们引起异常,并通过错误消息,专门说不允许副本。这样的错误消息可能对正在使用您的课程的程序员有帮助。

有帮助吗?

解决方案

我只能说我在5年后从未使用过它。也许更有用的是,在整个导轨源中,Greppper仅显示了7个实例,并且它们都与元编程有关。 (undef_method在22时具有更多的实例)。它似乎可用于测试有或没有模块混合模块的类的行为。

希望有人可以指出一些更常规的用途。

编辑请参阅以前的问题: UNDEF-您为什么要在Ruby中不确定一种方法?

其他提示

阻止儿童课程调用超类中定义的方法(实际上是在Mongrel的 setup.rb)(释义):

class Item
  def set
    do_something
  end
end

class ExecItem < Item
  undef set
end

虽然我猜 undef_method 会产生相同的效果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top