查看: 3779|回复: 6

[胡扯] 不是很懂这个NameError

[复制链接]
梦石
0
星屑
1944
在线时间
404 小时
注册时间
2015-8-30
回帖
322
发表于 2018-9-8 21:46:52 | 显示全部楼层 |阅读模式

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

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

×
QQ截图20180908214352.png
图中是2.5.1的Ruby的IRB
照道理说,class << Math的内部应该是Math模块的单例类,
在这个单例类中定义的实例方法内部,主调默认应该是Math这个模块
因此应该可以访问Math命名空间内的东西
但为啥Ruby在找PI这个常量的时候到#<Class:Math>找去了?
小仙女一枚~

老黄鸡

梦石
4
星屑
45700
在线时间
7948 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2018-9-8 23:15:07 | 显示全部楼层
你都知道定义的实例方法了……Math的实例和Math模块不是一个玩意儿(x
越讲越怪,建议看源码。

点评

Math和Math.singleton_class的实例是一个玩意  发表于 2018-9-9 14:59
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2018-9-8 23:57:34 | 显示全部楼层
math模块里的类不包括模块的常量
改成Math::PI试试?

点评

这不叫Math模块“里的类”,是Math模块的单例类,而且调用常数的地方在实例方法内部……这正是它访问不到Math::PI的奇怪之处  发表于 2018-9-9 15:00
回复

使用道具 举报

梦石
0
星屑
6891
在线时间
7027 小时
注册时间
2013-11-2
回帖
1263

开拓者剧作品鉴家

发表于 2018-9-9 00:17:01 | 显示全部楼层
本帖最后由 RaidenInfinity 于 2018-9-9 00:23 编辑

self::PI         
回复

使用道具 举报

梦石
0
星屑
4623
在线时间
1207 小时
注册时间
2016-4-7
回帖
944

开拓者

发表于 2018-9-9 18:22:10 | 显示全部楼层
https://ruby-china.org/topics/28696
最后我想指出,你在一个class的singleton里是无法访问在class内定义的常量。

class A
  module B; end
end
class << A
  B
end
# NameError: uninitialized constant Class::B
这是因为singleton class的祖先链中并不包含自身的class,直接从Class开始。

评分

参与人数 1赞 +1 收起 理由
有丘直方 + 1 认可答案

查看全部评分

附庸的附庸不是我的附庸,女儿的女儿还是我的女儿。CK2沉迷ing
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部