我的params哈希包含字符串值,如:
маслёнка | масло
我的方法目前有这样的代码:
s = %Q{(@content "#{params[:structure]}")}
这引用了整个字符串:
(@content "маслёнка | масло")
但我需要每个元素像这样单独报价:
(@content "маслёнка" | "масло")
我知道我需要通过|
符号将params字符串拆分为子字符串,但元素需要单独引用并用管道字符分隔。我怎么能在这里做到这一点?
input.split(" | ").map {|s| """ + s + """}.compact.join(" | ")
会得到你想要的。
拆分后引用数组元素
您的问题是由报价要求的复杂性引起的。解决这个问题的一种方法是使用Kernel#sprintf和Ruby的备用双引号文本(%Q
)来构建字符串。例如:
s = sprintf '(@content %s)',
params[:structure].split( /s+|s+/ ).
map { |elem| %Q["#{elem}"] }.
join(" | ")
# => "(@content "маслёнка" | "масло")"
您可以使用Kernel#puts验证字符串是否正确转义,在这种情况下会产生:
(@content"маслõнка"|"мнло")
这将把params
散列拆分为用|
分隔的字符串,但不会保留实际的|
字符。
s = %Q{(@content "#{params[:structure].split('|')}")}