我在同一目录中有三个Ruby文件:
classthree.rb
otherclass.rb
samplecode.rb
以下是classthree.rb的内容:
require './samplecode.rb'
require './otherclass.rb'
class ClassThree
def initialize()
puts "this class three here"
end
end
以下是samplecode.rb的内容:
require './otherclass.rb'
require './classthree.rb'
class SampleCode
$smart = SampleCode.new
@sides = 3
@@x = "333"
def ugly()
g = ClassThree.new
puts g
puts "monkey see"
end
def self.ugly()
s = SampleCode.new
s.ugly
puts s
puts $smart
puts "monkey see this self"
end
SampleCode.ugly
end
以下是otherclass.rb的内容:
require './samplecode.rb'
require './classthree.rb'
END {
puts "ending"
}
BEGIN{
puts "beginning"
}
class OtherClass
def initialize()
s = SampleCode.new
s.ugly
end
end
我的两个问题是:
require './xyz.rb'
更好的方法。是不是有像'./*。rb'?ruby otherclass.rb
时,我得到以下输出:
为什么我每次都会“开始”和“结束”两次?
答案 0 :(得分:4)
1 - 处理它的最佳方法是创建另一个文件。您可以将其称为environment.rb
或initialize.rb
,这将需要所有需要的文件。
$LOAD_PATH.unshift File.dirname(__FILE__)
require 'samplecode.rb'
require 'classthree.rb'
require 'classthree.rb'
现在,您只需要在应用程序启动时需要此文件一次。
在2 - 您从文件' otherclass.rb'开始。它显示第一个'开头'位,然后加载samplecode.rb
文件。此时,' otherclass.rb'尚未加载 - 任何其他文件都不需要它。因此samplecode.rb
重新运行整个otherclass.rb
,这是必需的。重新运行不会重新加载' samplecode.rb'因为它已经被要求(首先要求检查文件是否需要)。这就是为什么你两次看到这些消息的原因。