我已經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