0

私はRubyにまったく慣れていないので、この質問がまだ他の場所で答えられていないことを願っています. しかし、私はこことインターネットでかなり長い間検索してきましたが、まだ結果はありません.

テキスト ファイルから一連のファイル パスを読み込んでいます。各ファイル パスには、いくつかの式 (つまり #{...} ) が文字列に埋め込まれています。例えば:

input = 'E:/files/storage/#{high_or_low}/#{left_or_right}/*.dll'

とにかく、それらの文字列を ruby​​ コードであるかのように評価し、それらの式を置き換えたいと考えています。例えば:

def high_or_low
    'low'
end

def left_or_right
    'left'
end

# It represents a file path on the disk drive
input = 'E:/files/storage/#{high_or_low}/#{left_or_right}/*.dll'
puts input

# Now how do I execute this 'input' string so that it behaves as if it was defined with quotes?
result = eval input
puts result

元の入力文字列を意図的に一重引用符で囲んで、文字列がディスクから取り出されたときに、文字列に埋め込まれた式が未評価であることを示しています。では、これらの式で文字列を評価するにはどうすればよいでしょうか。上記のように eval を使用してもうまくいかないようです。次のエラーが表示されます。

test_eval.rb:15: compile error (SyntaxError)
test_eval.rb:15: syntax error, unexpected tIDENTIFIER, expecting $end

ありがとう

4

2 に答える 2

1

pst は、失敗する理由を指摘しました。別の方法として、データがどのように見えるかによって機能する場合と機能しない場合があります...ただし、メソッド名を持つ単純な文字列である場合(特に、ネストされた「}」が含まれていない場合)...

result = input.gsub(/\#{(.*?)}/) {|s| send($1)}
puts result
于 2012-11-13T17:35:06.967 に答える
0

あー見つけた。pst は私を正しい方向に導きました。したがって、入力変数をこのように引用符で囲むと、次のように機能しました。

result = eval '"' + input + '"'
puts result

=> E:/files/storage/low/left/*.dll

于 2012-11-13T18:04:11.547 に答える