【发布时间】:2011-07-20 09:31:40
【问题描述】:
我正在学习 Ruby 单例,我找到了一些方法来定义和获取类和对象单例方法的列表。
类单例方法
类单例方法的定义方式:
class MyClass
def MyClass.first_sing_method
'first'
end
def self.second_sing_method
'second'
end
class << self
def third_sing_method
'third'
end
end
class << MyClass
def fourth_sing_method
'fourth'
end
end
end
def MyClass.fifth_sing_method
'fifth'
end
MyClass.define_singleton_method(:sixth_sing_method) do
'sixth'
end
获取类单例方法列表的方法:
#get singleton methods list for class and it's ancestors
MyClass.singleton_methods
#get singleton methods list for current class only
MyClass.methods(false)
对象单例方法
对象单例方法的定义方式
class MyClass
end
obj = MyClass.new
class << obj
def first_sing_method
'first'
end
end
def obj.second_sing_method
'second'
end
obj.define_singleton_method(:third_sing_method) do
'third'
end
获取对象单例方法列表的方法
#get singleton methods list for object and it's ancestors
obj.singleton_methods
#get singleton methods list for current object only
obj.methods(false)
还有其他方法可以做到这一点吗?
【问题讨论】:
-
尽管这个问题很久以前就已经回答过了,为了完整起见:您也可以使用方法 class_eval 和 instance_eval。例如:obj.instance_eval {def hi;puts "hi";end} 或 Object.class_eval {def self.foo;puts "foo";end}(这与通过开放类扩展相同),或last: Object.instance_eval{def bar;puts "bar";end} (这样就打开了Object的虚类,虽然self和前面一样,但还是在不同的环境中!)
-
不错的总结,应该是个wiki
标签: ruby