我已经B类从类A衍生,等的访问名称时未初始化的常数:红宝石 - NameError:我的派生类
class A
..
end
class B < A
...
end
在另一文件I中定义的变量M
M = B
然后我得到了错误
"NameError: uninitialized constant B".
我发现,如果我写
M=A
M=B
然后就可以了。看来我必须以某种方式初始化A.
我已经B类从类A衍生,等的访问名称时未初始化的常数:红宝石 - NameError:我的派生类
class A
..
end
class B < A
...
end
在另一文件I中定义的变量M
M = B
然后我得到了错误
"NameError: uninitialized constant B".
我发现,如果我写
M=A
M=B
然后就可以了。看来我必须以某种方式初始化A.
由于文件与rails没有任何关系,我们假设它们是系统上任何文件夹中的两个独立文件。 假设他们在同一个目录中。
class_def.rb:
class A
def self.talk
puts 'hello'
end
end
class B < A
def self.talk
super()
puts 'world'
end
end
runner.rb:
require './class_def.rb'
M=B
M.talk
调用红宝石runner.rb应该产生输出
hello
world
但是我注意到使用RubyFiddle同样的错误
事情是类A和B在同一个文件中,而我从另一个文件访问它们。我可以在没有这个需求声明的情况下访问A,那么访问B时为什么需要这个? – user1991452 2013-03-12 20:34:44
如何在不需要文件的情况下访问A?你一定在做一些你没有说的东西。 – Mike 2013-03-13 16:25:03
这是一个红宝石项目。我把我的类定义文件放在app/models目录下,rails应该自动需要这个文件。我必须强调,我的类A不是ActiveRecord的子类。它只是独立的。 – user1991452 2013-03-14 00:03:42
为什么不继续前进,做一个电话? – sawa 2013-03-12 17:42:51
我以此作为临时的方式。我只是觉得这不太自然。我猜,Ruby应该有它的语法解决方案。 – user1991452 2013-03-12 18:01:55
这没有任何意义,你使用的是什么版本的红宝石? 我只是做了以下test.rb类A 结束 B类 Mike 2013-03-12 18:10:36