我正在學習符號,我很驚訝地發現文件中的所有符號都包含在Symbol.all_symbols
數組中,當我將它轉儲爲第一行時我的文件。 但是,如果我嘗試訪問進一步定義的類,我得到NameError
,換句話說它是一個無法識別的符號。Ruby類名稱在符號列表中,但不被翻譯人員識別
puts "DefinedAtEnd is in symbol list: \
#{Symbol.all_symbols.select {|s| s =~ /^DefinedAtEnd/} != nil} "
puts "do_it is in symbol list: \
#{Symbol.all_symbols.select {|s| s =~ /^do_it/} != nil} "
puts "foo is in symbol list: #{Symbol.all_symbols.select {|s| s =~ /^foo/} != nil} "
#d = DefinedAtEnd.new # This will get a NameError
class DefinedAtEnd
def do_it
foo = 'bar'
puts 'In method do_it'
end
end
上述運行得到這樣的結果:
DefinedAtEnd is in symbol list: true
do_it is in symbol list: true
foo is in symbol list: true
但是,如果我取消對該行d = DefinedAtEnd.new
然後我得到了以下錯誤:
uninitialized constant DefinedAtEnd (NameError)
似乎解析器(metparser? )在開始「執行」代碼行之前解析整個文件一次,但尚未構建類。也許這是某種'預傳'?
**解析**與**執行**(解釋) - 這是關鍵。謝謝。 – Will