1

別ファイルでクラスを定義してrequireしてオブジェクトを作成したのですが、initialize関数が2回実行されているようです。

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"

しかし、最初の行(コードが必要)(2番目のテストでは役に立たなかった(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"

何か案が?!

4

1 に答える 1

1

そのパスにあるすべての .rb ファイルではなく、必要なファイルだけを要求しないのはなぜですか? 変えたら

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

require 'b.rb'

期待どおりに動作するはずです

問題は、少なくとも a と b の両方の rb ファイルを含めることであり、そこに問題がある可能性があります。

また、初期化時に出力として「Hello」を送信する別の .rb ファイルがそのフォルダーにある可能性もあります。

そのフォルダーにすべての rb ファイルが含まれていることを忘れないでください。すなわち、ls *.rb

于 2013-03-05T22:24:41.273 に答える