我有了括號內正式指定參數和陣列中的實際ARGS的字符串。在下面的表達式中,我需要用實際參數來替換形式。尋找在Ruby中的選項來做到這一點乾淨..字符串替換紅寶石
string = "[m,n] { m + n * 8 + aa }"
array = [12, false]
output = "{ 12 + false * 8 + aa }"
我有了括號內正式指定參數和陣列中的實際ARGS的字符串。在下面的表達式中,我需要用實際參數來替換形式。尋找在Ruby中的選項來做到這一點乾淨..字符串替換紅寶石
string = "[m,n] { m + n * 8 + aa }"
array = [12, false]
output = "{ 12 + false * 8 + aa }"
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 * .. –
如果你的最終目標是評估使用提供的參數字符串,你可以這樣做:
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
生紅寶石,沒有乾淨。不知道樹頂等是否是正確的解決方案,可能比我需要的更多。 – Fanatic23