Tag: 实例方法

如何理解class_eval()和instance_eval()之间的区别?

Foo = Class.new Foo.class_eval do def class_bar "class_bar" end end Foo.instance_eval do def instance_bar "instance_bar" end end Foo.class_bar #=> undefined method 'class_bar' for Foo:Class Foo.new.class_bar #=> "class_bar" Foo.instance_bar #=> "instance_bar" Foo.new.instance_bar #=> undefined method 'instance_bar' for #<Foo:0x7dce8> 只是基于方法的名称, 我希望class_eval允许您将类方法添加到Foo和instance_eval,以允许您将实例方法添加到Foo。 但他们似乎做了相反的事情 。 在上面的例子中,如果你调用Foo类的class_bar,你会得到一个未定义的方法错误,如果你在Foo.new返回的实例上调用instance_bar,你也会得到一个未定义的方法错误。 这两个错误似乎都与对class_eval和instance_eval应该做什么的直观理解相矛盾。 这些方法真的有什么区别? class_eval的文档: mod.class_eval(string [,filename [,lineno]])=> obj 评估mod的上下文中的string或块。 这可以用来添加方法到一个类。 文档instance_eval : obj.instance_eval {| […]

类和实例方法有什么区别?

类方法和实例方法有什么区别? 实例方法访问器(getter和setter),而类方法几乎是一切?