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