Project1

标题: 嵌套定义和分开来有区别吗 [打印本页]

作者: 有丘直方    时间: 2016-5-8 10:21
标题: 嵌套定义和分开来有区别吗
本帖最后由 有丘直方 于 2016-5-8 10:52 编辑

尤其是用到元编程之类的,简直就(似乎)没有区别了。(代码没有测试过)

比较1:
  1. class A
  2. end
  3. class << A
  4.   def show
  5.     msgbox(1)
  6.   end
  7. end
  8. A.show
复制代码
  1. class A
  2.   class << self
  3.     def show
  4.       msgbox(1)
  5.     end
  6.   end
  7. end
  8. A.show
复制代码
比较2:
  1. class A
  2.   class B
  3.     def show
  4.       msgbox(1)
  5.     end
  6.   end
  7. end
  8. b = A::B.new
  9. b.show
复制代码
  1. class A
  2. end
  3. class B
  4.   def show
  5.     msgbox(1)
  6.   end
  7. end
  8. b = B.new
  9. b.show
复制代码

作者: 喵呜喵5    时间: 2016-5-8 13:02
本帖最后由 喵呜喵5 于 2016-5-8 13:05 编辑

比较1本来就没区别,在 class A 中 self 就是 A
比较2有区别
  1. class A
  2.   class B
  3.   end
  4. end
  5. p B # => uninitialized constant B (NameError)
复制代码
这里全局作用域只定义一个常量A,常量A仅作为一个命名空间使用
  1. class A
  2. end
  3. class B
  4. end
  5. p B # => class B
复制代码
这里全局作用域定义了常量A和常量B

另外,即使作为命名空间,一般也不会用到 class 而是直接使用父类的 module 了

还有,我听不懂你第一句话所说的用到元编程是什么意思
作者: 余烬之中    时间: 2016-5-8 16:53
本帖最后由 余烬之中 于 2016-5-8 19:48 编辑

不是很懂你们强行元编程
  1. 自己没理解的词就不要乱用
  2. 把 class, module 之类看作是 scope operator 而不是 declaration keyword
  3. 理解了我这里的几个名词之后再评论

作者: 无脑之人    时间: 2016-5-8 16:54
唔……多学习,少装逼,嗯/w\




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