设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

不是很懂这个NameError

查看数: 3140 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-9-8 21:46

正文摘要:

图中是2.5.1的Ruby的IRB 照道理说,class << Math的内部应该是Math模块的单例类, 在这个单例类中定义的实例方法内部,主调默认应该是Math这个模块 因此应该可以访问Math命名空间内的东西 但为啥Ruby在找PI这个常 ...

回复

shitake 发表于 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 认可答案

查看全部评分

RaidenInfinity 发表于 2018-9-9 00:17:01
本帖最后由 RaidenInfinity 于 2018-9-9 00:23 编辑

self::PI         
百里_飞柳 发表于 2018-9-8 23:57:34
math模块里的类不包括模块的常量
改成Math::PI试试?

点评

这不叫Math模块“里的类”,是Math模块的单例类,而且调用常数的地方在实例方法内部……这正是它访问不到Math::PI的奇怪之处  发表于 2018-9-9 15:00
fux2 发表于 2018-9-8 23:15:07
你都知道定义的实例方法了……Math的实例和Math模块不是一个玩意儿(x
越讲越怪,建议看源码。

点评

Math和Math.singleton_class的实例是一个玩意  发表于 2018-9-9 14:59
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-27 15:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表