Project1

标题: 请问class << AAA 是什么意思? [打印本页]

作者: b200077    时间: 2020-3-22 15:48
标题: 请问class << AAA 是什么意思?
跟一般的class有啥不同?
作者: soulsaga    时间: 2020-3-22 18:33
本帖最后由 soulsaga 于 2020-3-22 18:58 编辑

哎..网上找不到//
作者: colonp_a    时间: 2020-3-23 13:58
<<在ruby中是定义多行字符串,又叫Here document,<<后面紧跟一个保留字或者字符串,然后输入多行字符串,最后以紧跟的那个结尾。
print <<EOF
    这是第一种方式创建here document 。
    多行字符串。
EOF
作者: colonp_a    时间: 2020-3-23 14:07
colonp_a 发表于 2020-3-23 13:58

不对,应该是ruby的内部类。
作者: KB.Driver    时间: 2020-3-23 15:58
本帖最后由 KB.Driver 于 2020-3-23 16:08 编辑

class << obj
  # code
end

这个是"打开类"操作,"class <<"是打开类操作符
打开类可以为被打开的对象定义单例方法,也可以读取对象内部的变量、常量。
如果不想深究元编程的话,知道这么多就够了。


——分割线——

从不严谨的角度来说,打开类操作和class_eval(module_eval)有点类似
只不过一个是标准语法,一个是接收块作为参数的方法

打开类的本质是进入一个新的作用域,该作用域的self变为被打开对象的单例类
因此在这里定义的方法就会变成对象的单例方法。

打开类的应用场景一般有这几个:
1、类方法或模块方法需要使用环绕别名时,需要打开类后再使用别名
2、为任意对象(类和模块也是对象)定义单例方法(在单例内里使用include就是这样的技巧之一)
3、读取对象内部作用域的变量








欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1