gpt4 book ai didi

ruby - 在这种情况下 << 是什么?

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

我正在这里编写本教程: http://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/39-ruby-s-object-model/lessons/131-singleton-methods-and-metaclasses

类(class)是关于类/元类的,但它们使用的语法我不熟悉。请参阅 << 下面

的用法
class Object
def metaclass
class << self
self
end
end
end


a=Object.new
p a.metaclass.new

我知道def metaclass是一个方法,但是class << self是什么意思?它有一个对应的end block ,但我仍然很不清楚这到底在做什么

(注意:上述练习的要点只是表明您无法实例化元类——据我所知,在这种情况下,我只是无法理解 << 运算符。

谢谢!

最佳答案

class << self打开self的单例类,以便可以为当前 self 重新定义方法对象。

让我们看一个具体的例子:

 s = String.new("abc")
s.metaclass
=> "#<Class:#<String:0x0000010117e5d8>>"

让我们仔细看看这里发生了什么:

  • 里面定义metaclass , self指的是当前实例,在这个例子中是字符串“abc”。
  • class << self在这个例子中相当于 class << "abc"它打开了给定实例的单例类,在本例中是字符串“abc”。
  • 然后返回 self在当前实例的打开类中--打开的类在示例中是类String .

一般来说,定义metaclass打开给定实例/对象的类的类定义,然后返回该类名。

可以在 Yehuda Katz 的文章“Metaprogramming in Ruby: It’s All About the Self”中找到关于“ self ”的更详细信息。

我还推荐 Pragmatic Programmers on The Ruby Object Model and Metaprogramming 的截屏系列.

关于ruby - 在这种情况下 << 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289796/

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