【发布时间】:2012-11-25 16:27:15
【问题描述】:
在玩了一下 Ruby 时,我编写了以下代码:
class A
end
A.singleton_class.instance_eval do
undef_method :new
end
# or
# class << B
# undef_method :new
# end
A.new
> NoMethodError: undefined method `new' for A:Class
> from (irb):8
> from /home/mmsequeira/.rvm/rubies/ruby-1.9.3-p327/bin/irb:16:in `<main>'
这很酷。但是我如何知道给定类中哪些方法未定义?
【问题讨论】:
-
你不能。为什么需要知道?
-
只是在探索 Ruby。 Ruby 的反射非常好,所以无法获取这些信息似乎很奇怪。
-
@allareri 我不这么认为。
-
FWIW Ruby 确实在内部跟踪未定义的方法(
VM_METHOD_TYPE_UNDEF——这就是它确保未来调用不会落在例如基类实现上的方式,请参阅differences betweenundef_methodandremove_method),但是看着Ruby 源代码我看不到一种方法来检索这些方法列表,而不是编写本机代码。 -
@MMSequeira 疏忽可能不是原因;更有可能的想法是,既然你不能用它做任何事情(比如 un-
undefit),那么你为什么需要知道它的存在呢?换句话说,如果它不再嘎嘎叫,你真的需要知道它曾经是一只鸭子吗?
标签: ruby reflection