在看一个项目的源码的时候,看到了下面的代码
module ModuleA class ClassA end end
module ModuleA class ClassB end end
ModuleA::ClassA = ModuleA::ClassB
我大概知道这是将一个类赋给了另外一个类,但是详细内容还不清楚,也没查到,所以谁能帮忙解答下?
#1 楼 @Rei 不是很清楚这种用法,这种用法如果我创建个 ClassA 的对象,那么是不是实际上创建的是 ClassB? 换句话说,在经过下面代码之后,是不是 ClassA 的定义就变成了 ClassB 的
#1 楼 @Rei 项目是淘宝的 AutoMan
感觉只是把 ModuleA::ClassA 像个 pointer 一样指向 classB....
胡说的...无责任飘过
#4 楼 @karmue #2 楼 @Rei 我验证过,跟我想的是一样的,知识不知道 ruby 怎么就把类定义给换掉了,比较好奇 下面是我验证的代码
module ModuleA class ClassA def funca() puts "a" end end end module ModuleA class ClassB def funcb() puts "b" end end end ModuleA::ClassA = ModuleA::ClassB test = ModuleA::ClassA.new #正确的 test.funcb #错误的 #test.funca
test.class 显示啥?
#6 楼 @karmue ModuleA::ClassB
Ruby 里面大写开头的变量叫做常量,虽然叫做常量但是可以重复赋值,只是第二次赋值时解析器会输出警告。
类名也是个常量,比如可以动态生成一个类然后赋值给常量
A = Class.new do def bar "bar!" end end A.class #=> Class A.name #=> "A" A.new.bar #=> "bar!"
跟下面几乎等价(我没研究过区别):
class A def bar "bar!" end end
#9 楼 @Rei 学习了