2012-02-03 79 views
2

我正在学习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] 
         ^
+0

找到什么是你想用你的代码呢? – summea 2012-02-03 05:56:15

+0

这只是一个练习,从学习Ruby的艰难之路。 – deadghost 2012-02-03 05:57:07

+3

我想你想要'格式化程式%[1,2,3,4]'。 – 2012-02-03 05:59:05

回答

5

你要么一)不需要那么=标志:

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

+0

好吧,我现在看到了。等号给我语法错误。 – deadghost 2012-02-03 06:01:39

3

这不是完全清楚什么是你正在尝试做的。也许这个?

formatter = "%s %s %s %s"              
puts formatter % [1, 2, 3, 4] 
# >> 1 2 3 4 
相关问题