gpt4 book ai didi

ruby - 为什么 "class << self"中的 self 指的是类?

转载 作者:数据小太阳 更新时间:2023-10-29 07:24:28 26 4
gpt4 key购买 nike

下面的代码输出“I am Thing”。

class Thing
class << self
def foo
puts "I am #{self}."
end
end
end

Thing.foo

我以为“self”指的是 Thing 类型的对象,但它指的是 Thing 类。我从之前的一个问题(评论中有链接)中了解到,这与 Thing 是 Object 的一个实例有关。以 class << self 开头的 block 实际上是在“self”将 Thing 称为实例的上下文中执行的吗?这里发生了什么?

最佳答案

方法内部 self 指的是实例,在类/模块定义内部,但在任何方法之外——指类/模块本身。

class Thing
puts self.inspect
def foo
puts self.inspect
end
end
puts "==="
Thing.new.foo

试试上面的代码,你可能会看到那里发生了什么:类首先被解析,第一个 puts 被执行。然后 puts "===" 打印出 "===" 字符串。然后,实例从方法内部被打印出来。

关于ruby - 为什么 "class << self"中的 self 指的是类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387792/

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