1

require はローカルに定義された関数を実行できますか? 必要なものを説明する最も簡単な方法は、例を示すことだと思います。

Ruby 1.9.3 を使用していますが、1.8 および 2.0 のソリューションも歓迎します。

次のような main.rb ファイルがあります。

class Stuff
  def self.do_stuff(x)
    puts x
  end
  require_relative('./custom.rb')

  do_stuff("y")
end

また、同じフォルダーに次の内容のファイル custom.rb があります。

do_stuff("x")

main.rb を実行すると、次の出力が得られます。

/home/fotanus/custom.rb:1:in `<top (required)>': undefined method `do_stuff' for main:Object (NoMethodError)
    from main.rb:5:in `require_relative'
    from main.rb:5:in `<class:Stuff>'
    from main.rb:1:in `<main>'

requireがない場合、出力は であることに注意してくださいy

4

2 に答える 2

4

それが最善の解決策であるかどうかはわかりませんが、使用evalするとうまくいくはずです。

class Stuff
  def self.do_stuff(x)
    puts x
  end
  eval(File.read('./custom.rb'))

  do_stuff("y")
end

出力は次のようになります。

pigueiras@pigueiras$ ruby stuff.rb 
x
y
于 2013-05-08T21:53:43.383 に答える
2

C では、#include文字通りコードをそのままファイルにドロップします。requireRuby では異なります。実際には、必要なファイル内のコードを独自のスコープで実行します。これは良いことです。そうしないとrequirerequire.

スクリプトの内容を読み込んで現在のコンテキストで評価したい場合は、それを行うためのメソッドがあります:File.readeval.

于 2013-05-08T22:10:29.137 に答える