gpt4 book ai didi

ruby - 在 instance_eval block 中使用 self 进行方法定义有区别吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:08 25 4
gpt4 key购买 nike

鉴于 self 引用调用 instance_eval 的对象,在 instance_eval block 中使用 self 进行方法定义有区别吗?

Z.instance_eval do
def x
end

def self.y
end
end

> Z.x
=> nil
> Z.y
=> nil

self 似乎是多余的,因为 self 指的是 Z。

最佳答案

没有区别。正是出于您在问题中解释的原因。

这是冗余使用 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 可能是多余的。

关于ruby - 在 instance_eval block 中使用 self 进行方法定义有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51830124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com