我有一个字符串,括号内有形式 args,数组中有实际的args。在下面的表达式中,我需要用实际的args替换形式。在Ruby中寻找干净利落的选择..
string = "[m,n] { m + n * 8 + aa }"
array = [12, false]
output = "{ 12 + false * 8 + aa }"
答案 0 :(得分:3)
def convert( expression, *input_values )
params = /^\[([^\]]+)\]\s*/
keys = expression[params,1].split(',')
map = Hash[ keys.zip(input_values) ]
key_re = /\b(?:#{keys.join('|')})\b/
expression.sub(params,'').gsub(key_re){ |key| map[key] }
end
p convert( "[m,n] { m + n * 8 + aa }", 12, false )
#=> "{ 12 + false * 8 + aa }"
这是如何运作的:
keys
{"m"=>12, "n"=>false}
。/\b(?:m|n)\b/
答案 1 :(得分:0)
如果你的最终目标是使用提供的参数来评估字符串,你可以这样做:
aa = 7
args = [12, 6]
str = "[m,n] { m + n * 8 + aa }"
proc_str = "-> " + str.sub("[","(").sub("]",")") # "-> (m,n) { m + n * 8 + aa }"
eval(proc_str).call(*args) # => 67