2013-03-05 45 views
1

我在一個單獨的文件中定義了一個類,並且需要它並創建了一個object.but似乎initialize函數執行了兩次。要求一個類導致雙重執行

a.rb:

Dir["#{File.dirname(__FILE__)}/*.rb"].each do |f| require(f) end 
object = First.new 

b.rb(這是必需的):

class First 
    def initialize 
    p "Hello" 
    end 
end 

和結果:

"Hello" 
"Hello" 

連帶有趣,如果我說我測試別的東西。我把b.rb碼a.rb(我的意思是我定義的a.rb頭等),結果是一樣的:

a.rb:

Dir["#{File.dirname(__FILE__)}/*.rb"].each do |f| require(f) end #I now this line is useless 

class Second 
    def initialize 
    p "Hello" 
    end 
end 
object = Second.new 



"Hello" 
"Hello" 

但是當我刪除了第一線(需要密碼)(這是在第二次測試無用的(因爲我們在a.rb定義的類等b.rb了沒用))一切正常

a.rb:

#Dir["#{File.dirname(__FILE__)}/*.rb"].each do |f| require(f) end #now it is not executed. 


class Second 
    def initialize 
    p "Hello" 
    end 
end 
object = Second.new 

"Hello" 

有什麼想法?

+0

因爲你包含'a.rb'並且再次執行它。 – texasbruce 2013-03-05 23:31:47

回答

1

爲什麼你只需要你需要的文件,而不是那個路徑中的所有.rb文件?如果更改

Dir["#{File.dirname(__FILE__)}/*.rb"].each do |f| require(f) end 

require 'b.rb' 

應該按預期工作

的事情是,你將在最起碼是包括A和B RB文件,這是可能的地方問題在於

也可能在該文件夾中還有另一個.rb文件,該文件在初始化時也會將「Hello」作爲輸出發送。

請記住,您的要求是在該文件夾中包含所有rb文件。即ls *.rb的結果

+0

我知道,但我很好奇的原因。我要求b.rb,我沒有任何關係,但它影響我的結果。(第二測試)爲什麼?通過將第一行更改爲您所建議的問題得到解決,並進行測試。 – Pooya 2013-03-05 22:49:37