语法错误,期待“=”

时间:2010-07-11 01:56:16

标签: ruby syntax

我正在尝试为Project Euler中的问题6编写Rubyish解决方案,因为我倾向于在其他语言中编写C语言。但是,这段代码:

sqrsum, sumsqr = 0, 0
(1..100).each { |x| sqrsum, sumsqr += x, x**2 }
p (sumsqr - (sqrsum ** 2))

解决了这些错误:

/Users/Andy/Documents/Programming/Ruby/ProjectEuler/P6.rb:2: syntax error, unexpected tOP_ASGN, expecting '='
(1..100).each { |x| sqrsum, sumsqr += x, x**2 }
                                     ^
/Users/Andy/Documents/Programming/Ruby/ProjectEuler/P6.rb:2: syntax error, unexpected tPOW, expecting '='
(1..100).each { |x| sqrsum, sumsqr += x, x**2 }
                                            ^

我在这里做错了什么?我只允许分配那个句法结构吗?

4 个答案:

答案 0 :(得分:3)

您正尝试进行多项分配,但未使用分配运算符=。 将sqrsum, sumsqr = 0, 0sqrsum, sumsqr += x, x**2进行比较。

可能你想写sqrsum, sumsqr = sqrsum+x, sumsqr+x**2

答案 1 :(得分:2)

为什么不做{ |x| sqrsum += x; sumsqr += x**2}

答案 2 :(得分:2)

你也可以使用inject

sqrsum, sumsqr = (1..100).inject(:+), (1..100).inject(0) { |result,x| result + x**2 }
p(sumsqr - sqrsum**2)

[编辑:感谢评论者指出:+速记]

答案 3 :(得分:1)

你想要吗

sqrsum,sumsqr = sumsqr + x,x ** 2