鉴于self引用了调用instance_eval的对象,在instance_eval块中使用self进行方法定义之间有区别吗?
Z.instance_eval do
def x
end
def self.y
end
end
> Z.x
=> nil
> Z.y
=> nil
self似乎多余,因为self指的是Z。
答案 0 :(得分:1)
没有区别。正是出于您在问题中解释的原因。
这是 self
的冗余使用示例。在调用方法而不是定义方法时,通常会看到这种情况:
class Donald
def x
end
def y
self.x # <-- `self` is redundant. We could just call `x` directly.
end
end
但是,如果您以我的示例的荒谬为借口,则能够明确声明该对象(即使它是self
)有时也会很有用。考虑:
class Y; end
class Z; end
Z.instance_eval do
def random_class
rand > 0.5 ? Y : self
end
def random_class.x
end
end
在这里,random_class
是在运行时求值的-即使self
可能是多余的,所以代码在语法上也有效。