gpt4 book ai didi

ruby - 访问 Ruby 中的元类

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

我正在尝试更好地理解 Ruby 的规则以及如何访问元类。我正在阅读 Yehuda Katz 关于元编程的文章,我发现了这个:

matz = Object.new  
def matz.speak
"Place your burden to machine's shoulders"
end

matz.class #=> Object

事实上,matz 的“类”是它不可见的元类。我们甚至可以访问元类:

metaclass = class << matz; self; end  
metaclass.instance_methods.grep(/speak/) #=> ["speak"]

这一行发生了什么:

metaclass = class << matz; self; end  

这是否与:

matz
self
end

?

最佳答案

What is going on on this line:

metaclass = class << matz; self; end  
class << foo

打开foo 的单例类。在类定义体中,self 是类。类定义体的返回值是类定义体中最后一个表达式的值。

所以,我们给类定义体赋值,也就是类定义体内部最后一个表达式的值,也就是self,也就是类,即单例类matz.

换句话说:我们将 matz 的单例类分配给局部变量 metaclass

请注意现代 Ruby 有 Object#singleton_class用于此目的的方法(在 2010 年发布的 Ruby 1.9.2 中添加)。

Is that the same as:

matz
self
end

显然不是,因为前者是合法语法,而这不是。

关于ruby - 访问 Ruby 中的元类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906930/

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