要求一个类导致双重执行

时间:2013-03-05 22:13:54

标签: ruby

我在一个单独的文件中定义了一个类,并且需要它并创建了一个对象。但似乎初始化函数执行了两次。

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中定义了First类),结果是一样的:

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"

任何想法?!

1 个答案:

答案 0 :(得分:1)

为什么不直接要求所需的文件而不是该路径中的所有.rb文件?如果你改变了

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

require 'b.rb'

它应该按预期工作

问题是你至少会包含a和b rb文件,这可能是问题所在

你也可能在该文件夹中有另一个.rb文件,在初始化时也会发送“Hello”作为输出。

请记住,您的要求包括该文件夹中的所有rb文件。即ls *.rb

的结果