三个Ruby类,三个以上的问题?

时间:2014-03-20 01:11:58

标签: ruby

我在同一目录中有三个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

我的两个问题是:

  1. 对于目录中的每个类,必须有比require './xyz.rb'更好的方法。是不是有像'./*。rb'?
  2. 的东西
  3. 当我运行ruby otherclass.rb时,我得到以下输出:
  4. enter image description here

    为什么我每次都会“开始”和“结束”两次?

1 个答案:

答案 0 :(得分:4)

1 - 处理它的最佳方法是创建另一个文件。您可以将其称为environment.rbinitialize.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'因为它已经被要求(首先要求检查文件是否需要)。这就是为什么你两次看到这些消息的原因。