instance_eval,class_eval,def以及define_method
2013-06-27 17:18
417 查看
为以下方便先将获取Eigenclass的代码加入到Object中,代码如下:
class Object
def eigenclass
class << self; self; end
end
end
这样使用 Test.eigenclass即可取得Test变量的Eigenclass,示例代码如下:
class Test; end
Test.instance_eval do
def test1
puts "test1"
end
end
Test.instance_eval do
define_method :test2 do
puts "test2"
end
end
Test.class_eval do
def test3
puts "test3"
end
end
Test.class_eval do
define_method :test4 do
puts "test4"
end
end
t = Test.new
puts Test.instance_methods(false)
puts "=="
puts Test.eigenclass.instance_methods(false)
puts "=="
puts Test.singleton_methods(false)
注意test1和test2的区别。输出如下:
test2
test3
test4
==
test1
==
test1
class Object
def eigenclass
class << self; self; end
end
end
这样使用 Test.eigenclass即可取得Test变量的Eigenclass,示例代码如下:
class Test; end
Test.instance_eval do
def test1
puts "test1"
end
end
Test.instance_eval do
define_method :test2 do
puts "test2"
end
end
Test.class_eval do
def test3
puts "test3"
end
end
Test.class_eval do
define_method :test4 do
puts "test4"
end
end
t = Test.new
puts Test.instance_methods(false)
puts "=="
puts Test.eigenclass.instance_methods(false)
puts "=="
puts Test.singleton_methods(false)
注意test1和test2的区别。输出如下:
test2
test3
test4
==
test1
==
test1
相关文章推荐
- [Ruby] ruby创建类方法 ,以及class_eval 、instance_eval的使用
- Ruby 中的各种变量(local/instance/class/global variable and assignment method)
- python @classmethod 和 @staticmethod区别,以及类中方法参数cls和self的区别
- The class org.apache.poi.hssf.record.DrawingRecord needs to define a clone method
- 我所理解的【实例.方法()/instance.method()/类.方法(实例)/class.method(instance)】
- [NSArray count]: method only defined for abstract class. Define -[IngredientsMutableArray count]
- 【Ruby】instance_eval和class_eval用法讲解
- [Ruby笔记]22.Ruby :: namespace 以及 instance method 与class method
- define a class for a linked list and write a method to delete the nth node.
- ruby define_method、instance_methods等讲解
- Ruby instance_eval 与 class_eval
- ruby的class << self, 及其class_eval和instance_eval的区别
- Perl: class method and instance method
- ruby中的instance_eval,class_eval,eval
- Ruby meta programming 4(eval/class_eval/module_eval/instance_eval)
- class_eval和instance_eval的区别
- TypeError: unbound method must be called with class instance 1st argument
- ruby的instance_eval和class_eval, self && current class
- class_getInstanceMethod和class_getClassMethod的区别
- instance_eval(instance_exec) 和 class_eval(class_exec)