我正在学习红宝石,无法弄清楚这里有什么问题。
formatter = "%s %s %s %s"
puts formatter = % [1, 2, 3, 4]
结果:
ex8.rb:3: syntax error, unexpected tINTEGER, expecting $end
puts formatter = % [1, 2, 3, 4]
^
答案 0 :(得分:5)
您 a)不需要=
签名:
formatter = "%s %s %s %s"
puts formatter % [1, 2, 3, 4]
或 b)需要以不同的方式将结果分配给formatter
:
formatter = "%s %s %s %s"
puts formatter = formatter % [1, 2, 3, 4]
或
formatter = "%s %s %s %s"
formatter = formatter % [1, 2, 3, 4]
puts formatter
b的前一个答案会将结果分配给formatter
,然后输出该分配的结果,这将是右侧。我推荐后者(当然你可以将前两行压缩成一行)只是因为它更清晰。
修改强>
此外,如果您选中the code in Learn Ruby the Hard Way,则他们不会将任何内容重新分配给formatter
。关键是你可以通过formatter %
提供任何四项数组,它将产生这四项的文本内容。我看到它只是浸入Ruby方法(你可能不熟悉printf),但以下是等价的:
puts formatter % [1, 2, 3, 4]
puts formatter.%([1, 2, 3, 4])
# And the very retro
puts sprintf(formatter, 1, 2, 3, 4)
换句话说,虽然操作员有一些细微差别 - 只有一些糖,你可以实际使用%=
之类的东西来分配结果而你不需要.
分开对象及其方法 - 这些只是方法。你可以look up %
in Ruby's documentation像任何其他方法一样。
答案 1 :(得分:3)
目前还不完全清楚你要做的是什么。也许这个?
formatter = "%s %s %s %s"
puts formatter % [1, 2, 3, 4]
# >> 1 2 3 4
答案 2 :(得分:1)
这些被称为带参数的格式规范,
"I got the following values: %s, %d, %d and %d" % ["Tom", 2, 3, 4]
=> "I got the following values: Tom, 2, 3 and 4"
"%05d" % 123
=> "00123"
找到更多内容