Tag: class eval

什么是class_eval和类<< className之间的区别?

我是Ruby的首发。 我发现这些都非常相似(在输出中),但我无法理解下面的上下文中的差异。 例如,我有一个class级 class Say def self.hello puts “hello” end end 并且可以像这样扩展 class << Say def hi puts "hi" end end 也喜欢这个 Say.class_eval do def self.bye puts “bye” end end 什么时候应该使用<<和class_eval ?

带有attr_accessor的类上的Ruby instance_eval

我理解instance_eval和class_eval之间的基本区别。 我在玩游戏时发现的是涉及attr_accessor奇怪之attr_accessor 。 这是一个例子: A = Class.new A.class_eval{ attr_accessor 😡 } a = A.new ax = “x” ax => “x” # … expected A.instance_eval{ attr_accessor :y } Ay = “y” => NoMethodError: undefined method `y=’ for A:Class ay = “y” => “y” # WHATTT? 怎么样: instance_eval没有在我们的A类(对象)的访问器上 然后它实际上把它添加到A的实例?