我对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
由于
答案 0 :(得分:1)
pst指出你失败的原因。作为替代方案,取决于您的数据看起来可能有效,也可能无效......但如果它是带有方法名称的简单字符串(特别是不包含嵌套的“}”...
result = input.gsub(/\#{(.*?)}/) {|s| send($1)}
puts result
答案 1 :(得分:0)
result = eval '"' + input + '"'
puts result
=> E:/文件/存储/低/左/ * DLL