我在一个单独的文件中定义了一个类,并且需要它并创建了一个对象。但似乎初始化函数执行了两次。
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"
任何想法?!
答案 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