意外的tINTEGER,期待$ end

dea*_*ost 2 ruby

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

formatter = "%s %s %s %s"                                                       
puts formatter = % [1, 2, 3, 4]    
Run Code Online (Sandbox Code Playgroud)

结果:

ex8.rb:3: syntax error, unexpected tINTEGER, expecting $end
puts formatter = % [1, 2, 3, 4] 
                        ^
Run Code Online (Sandbox Code Playgroud)

bry*_*mck 5

你要么a)不需要那个=标志:

formatter = "%s %s %s %s"
puts formatter % [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

b)需要以formatter不同的方式分配结果:

formatter = "%s %s %s %s"
puts formatter = formatter % [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

要么

formatter = "%s %s %s %s"
formatter = formatter % [1, 2, 3, 4]
puts formatter
Run Code Online (Sandbox Code Playgroud)

b的前一个答案将结果分配给formatter然后输出该分配的结果,这将是右侧.我推荐后者(当然你可以将前两行压缩成一行)只是因为它更清晰.

编辑:
此外,如果你检查学习Ruby的艰难方式中的代码,他们不会重新分配任何东西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)
Run Code Online (Sandbox Code Playgroud)

换句话说,虽然运算符有一些细微差别 - 只是一些糖,你可以实际使用像%=分配结果的东西,你不需要.分离对象及其方法 - 这些只是方法.你可以像任何其他方法一样查看%Ruby的文档.