查看: 2796|回复: 4

[已经解决] 请问class << AAA 是什么意思?

[复制链接]
梦石
0
星屑
1388
在线时间
343 小时
注册时间
2016-7-17
回帖
82
发表于 2020-3-22 15:48:23 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
跟一般的class有啥不同?
梦石
0
星屑
39291
在线时间
11158 小时
注册时间
2009-3-15
回帖
4768
发表于 2020-3-22 18:33:27 | 显示全部楼层
本帖最后由 soulsaga 于 2020-3-22 18:58 编辑

哎..网上找不到//
回复

使用道具 举报

梦石
0
星屑
419
在线时间
54 小时
注册时间
2019-6-19
回帖
8
发表于 2020-3-23 13:58:48 | 显示全部楼层
<<在ruby中是定义多行字符串,又叫Here document,<<后面紧跟一个保留字或者字符串,然后输入多行字符串,最后以紧跟的那个结尾。
print <<EOF
    这是第一种方式创建here document 。
    多行字符串。
EOF
回复 0 1

使用道具 举报

梦石
0
星屑
419
在线时间
54 小时
注册时间
2019-6-19
回帖
8
发表于 2020-3-23 14:07:11 | 显示全部楼层

不对,应该是ruby的内部类。
回复 0 1

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2020-3-23 15:58:52 | 显示全部楼层
本帖最后由 KB.Driver 于 2020-3-23 16:08 编辑

class << obj
  # code
end

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


——分割线——

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

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

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



评分

参与人数 2赞 +2 收起 理由
b200077 + 1 精品文章
MCCF + 1 认可答案

查看全部评分

用头画头像,用脚写脚本
回复 3 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部