下面的代码输出“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/