意外的tINTEGER,期待$ end

时间:2012-02-03 05:53:28

标签: ruby

我正在学习红宝石,无法弄清楚这里有什么问题。

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] 
                        ^

3 个答案:

答案 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"

您可以在http://ruby-doc.org/core-1.9.3/String.html#method-i-25

找到更多内容