Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 语法错误,应为“0”=&引用;_Ruby_Syntax - Fatal编程技术网

Ruby 语法错误,应为“0”=&引用;

Ruby 语法错误,应为“0”=&引用;,ruby,syntax,Ruby,Syntax,我正试图为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 t

我正试图为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 }
                                            ^
我做错了什么?我只允许在那个语法结构中赋值吗?

你想要吗

sqrsum,sumsqr=sumsqr+x,x**2你想要吗


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

您试图进行多个赋值,但未使用赋值运算符
=
。 比较
sqrsum,sumsqr=0,0
sqrsum,sumsqr+=x,x**2


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

您正在尝试进行多个赋值,但您没有使用赋值运算符
=
。 比较
sqrsum,sumsqr=0,0
sqrsum,sumsqr+=x,x**2


可能你想写
sqrsum,sumsqr=sqrsum+x,sumsqr+x**2
为什么不直接写
{x | sqrsum+=x;sumsqr+=x**2}
为什么不直接写
{x | sqrsum+=x;sumsqr+=x**2}
<

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

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

您也可以使用
inject

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


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

对不起,我仍然不明白为什么我的版本(你答案中的第二个代码段)无效。=可以做多个作业,+=不能对不起,我仍然不明白为什么我的版本(你答案中的第二个代码段)无效。=可以做多个作业,你的答案是最接近的。事实证明我真正想要的是
sqrsum,sumsqr=sumsqr+x,sqrsum+x**2
你的答案是最接近的。原来我真正想要的是
sqrsum,sumsqr=sumsqr+x,sqrsum+x**2
,因为我不知道我可以+1是的,ruby中的分号基本上充当换行符,允许您在一行上执行多个命令,因为我不知道我可以+1是的,ruby中的分号基本上充当换行符,允许您在一行上执行多个命令。我喜欢这种方法,但您的示例不起作用。你能帮我理解为什么吗?哦!我知道了!它应该是结果,而不是相反。医生万岁。:)总和也可以写为
(1..100)。inject(&:+)
@Wayne Conrad:
inject
也使用一个简单的符号:
(1..100)。inject(:+)
@Andrew my fault,上面编辑@Jorg和@Wayne cool,不知道:+我喜欢这个方法,但是你的例子不起作用。你能帮我理解为什么吗?哦!我知道了!它应该是结果,而不是相反。医生万岁。:)总和也可以写为
(1..100)。inject(&:+)
@Wayne Conrad:
inject
也使用一个简单的符号:
(1..100)。inject(:+)
@Andrew my fault,上面编辑@Jorg和@Wayne cool不知道:+