class_eval和instance_eval的区别
2014-09-17 15:13
375 查看
#### instance_eval从名字上看,它的调用者必须是一个实例:
同样,因为类class本身也是Class类的一个实例,instance_eval也可以用在类上,这个时候就可以在其中定义该类的singleton_method,即为该类的类函数.
#### class_eval 的调用者receiver必须是一个类,而在class_eval block的内部,self即为receiver类本身.
根据这个定义,如果在一个类上调用了class_eval,就可以在其中定义该类的实例函数 instance_method
详细讲解:https://ruby-china.org/topics/2442
class A end a = A.new a.instance_eval do self #===>a def method1 puts "it's a's instance method, only for a" end end a.method1 #=it's a's instance method, only for a
同样,因为类class本身也是Class类的一个实例,instance_eval也可以用在类上,这个时候就可以在其中定义该类的singleton_method,即为该类的类函数.
class A end A.instance_eval do self # A def method1 puts "it's A's class method" end end A.method1 # it's A's class method
#### class_eval 的调用者receiver必须是一个类,而在class_eval block的内部,self即为receiver类本身.
class A end A.class_eval do self # => A # current class => A end
根据这个定义,如果在一个类上调用了class_eval,就可以在其中定义该类的实例函数 instance_method
class A end a = A.new a.method1 #=> NoMethodError: undefined method `method1' for #<A:0x10043ff70> A.class_eval do self # => A # current class => A def method1 puts 'this is a instance method of class A' end end a.method1 #=> this is a instance method of class A
详细讲解:https://ruby-china.org/topics/2442
相关文章推荐
- ruby的class << self, 及其class_eval和instance_eval的区别
- class_eval 和 instance_eval的区别
- ruby的class << self, 及其class_eval和instance_eval的区别
- ruby的class << self, 及其class_eval和instance_eval的区别
- instance_eval与class_eval的区别
- Ruby meta programming 4(eval/class_eval/module_eval/instance_eval)
- rails环境下 ruby环境下class_eval的区别
- ruby中的instance_eval,class_eval,eval
- ruby的instance_eval和class_eval, self && current class
- Class.newInstance与同new的到对象的区别
- class_getInstanceMethod和class_getClassMethod的区别
- Class.newInstance()与new、Constructor.newInstance()的区别
- getClass\instanceof区别
- eval, class_eval, instance_eval和binding
- Class.newInstance()与new、Constructor.newInstance()的区别
- 深入理解 Ruby 中的 instance_eval 和 class_eval
- Class.forName(xxx.xx.xx) ClassLoader.loadClass newInstance()区别
- [Ruby] ruby创建类方法 ,以及class_eval 、instance_eval的使用
- instance_eval,class_eval,def以及define_method
- 【Ruby】instance_eval和class_eval用法讲解