gpt4 book ai didi

ruby - 顶级方法中 `self` 的规则是什么?

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

如果我在 Ruby 文件中定义一个顶级方法,self 的值似乎在很大程度上取决于调用它的人。

def who_am_i
puts self.inspect
end

class A
def self.foo
who_am_i
end
def foo
who_am_i
end
end

def foo
who_am_i
end

foo # >> main
A.foo # >> A
A.new.foo # >> #<A:...>

显然,如果一个方法是在一个类中定义的self 要么是类本身(对于类方法),要么是该类的相关实例(例如方法)。似乎,根据上面显示的试验,类中定义的方法 not 从其调用者继承 self ,但我找不到任何官方引用或任何东西支持这一点。有人可以提供描述这种行为的官方来源,最好是它为什么以这种方式工作的理由吗?

最佳答案

main 对象的上下文中定义的所有方法,都将成为 Object 上的 [private] 方法。因为一切都是对象,所以这个方法随处可用。这也是为什么 self 会根据您从何处调用它而发生变化:它们都是不同的对象,但它们也都继承了此方法。

private_methods.include?(:who_am_i) # => true
foo # => "main"
A.private_methods.include?(:who_am_i) # => true
A.foo # => "A"
A.new.private_methods.include?(:who_am_i) # => true
A.new.foo # => "#<A:0x00007feaad034e00>"

关于ruby - 顶级方法中 `self` 的规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51565909/

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