所以我要做的是在数组中使用格式并获得输出。
formatter = ["%{name}","%{height}","%{weight}"]
puts formatter % {name: "Gleb", height: "174", weight: "64"}
无法理解为什么它不起作用。
如何在数组中使用格式并获得输出:
formatter.map { |f| f % {name: "Gleb", height: "174", weight: "64"} }
#⇒ ["Gleb", "174", "64"]
如果预期的输出是"Gleb 174 64"
,那么之后可能会加入结果:
formatter.map do |f|
f % {name: "Gleb", height: "174", weight: "64"}
end.join(' ')
#⇒ "Gleb 174 64"
看起来你试图让formatter
成为一个字符串,而不是一个数组,所以你忘记了%
之前的[
:
formatter = %["%{name}","%{height}","%{weight}"]
puts formatter % {name: "Gleb", height: "174", weight: "64"}
#=> "Gleb","174","64"
您的格式化程序变量必须包含String对象。目前,您通过将多个字符串括在方括号中来指定一个数组,这些字符串将它们指定为数组文字的元素。
修复代码的一种方法是删除数组元素周围的括号,并将它们合并为单个字符串以进行插值。例如:
formatter = "%{name}, %{height}, %{weight}"
formatter % {name: "Gleb", height: "174", weight: "64"}
#=> "Gleb, 174, 64"
当然还有其他解决方案,有或没有百分比运算符,但这应该解决您的特定问题,同时保留您想要的格式字符串语义。