0

入力ファイルで定義された任意の変数、メソッド、およびクラスにアクセスできる方法で、ユーザー定義の Ruby 入力ファイルをアプリケーションにロードする方法はありますか? 入力ファイルの例は次のようになります。

def my_callback(t)
    t ** 2
end
parameter_x = "10 bytes"
parameter_y = my_callback

私のアプリケーションでは、次のようなことをしたいと思います。

input = load_input_file
puts input.parameter_x     # => "10 bytes"
puts input.parameter_y(2)  # => 4

入力ファイルをオブジェクトの名前空間にロードできない場合、次善の策は変数へのローカル アクセスです (変数がグローバルに表示されない限り)。

load_input_file
puts parameter_x     # => "10 bytes"
puts parameter_y(2)  # => 4

これは可能ですか (入力ファイルを手動で解析せずに)?

4

1 に答える 1

1

これらはあなたのオプションだと思います:

1.ラップmoduleアラウンドinput.rb

module Input
  CONST = 1
  def meth
   ...
end

ただし、ユーザーは以下を追加する必要がありmodule Inputますend。(求めすぎじゃない?)

2.文字列化

あなた自身の提案に従って:ファイルをStrinigfyinput.rbし、モジュールでラップし、ローカル変数をivarに変更してから、それをinput_modified.rbファイルに出力します:

@この場合、変数宣言の前に を追加するようにユーザーに指示すると、はるかに簡単になります。

require 'fileutils'
require 'tempfile'

inp = 'input.rb'
oup = 'input_modified.rb'
out = Tempfile.new('temp.txt')

File.open(inp, 'r') do |file|
  out.puts "module Input\n" + file.read.gsub("\n","\n\s") + "\nend"
end
FileUtils.mv out.path, oup
于 2012-07-24T03:41:36.677 に答える