1

我的参数哈希包含字符串值,如:

маслёнка | масло

我的方法目前有这个代码:

s = %Q{(@content "#{params[:structure]}")}

这引用了整个字符串:

(@content "маслёнка | масло")

但我需要像这样单独引用每个元素:

(@content "маслёнка" | "масло")

我知道我需要通过|符号将参数字符串拆分为子字符串,但元素需要单独引用并用管道字符分隔。我怎么能在这里做到这一点?

4

3 回答 3

1

拆分后引用您的数组元素

您的问题是由您的报价要求的复杂性引起的。解决此问题的一种方法是使用Kernel#sprintf和 Ruby 的备用双引号文字 ( %Q) 来构建您的字符串。例如:

s = sprintf '(@content %s)',
            params[:structure].split( /\s+\|\s+/ ).
            map { |elem| %Q["#{elem}"] }.
            join(" | ")
# => "(@content \"маслёнка\" | \"масло\")"

您可以使用Kernel#puts验证字符串是否正确转义,在这种情况下会产生:

(@content "маслёнка" | "масло")

于 2013-07-29T19:32:27.727 回答
1
input.split(" | ").map {|s| "\"" + s + "\""}.compact.join(" | ")

会给你你想要的。

于 2013-07-29T19:16:42.217 回答
0

这会将params散列拆分为由 分隔的字符串|,但不会保留实际|字符。

s = %Q{(@content "#{params[:structure].split('|')}")}

于 2013-07-29T19:13:52.783 回答