Синтаксическая ошибка, ожидание "=" - PullRequest
1 голос
/ 11 июля 2010

Я пытаюсь написать решение Rubyish для проблемы 6 в Project Euler, потому что у меня есть склонность писать 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 ]

3 голосов
/ 11 июля 2010

Вы пытаетесь выполнить несколько назначений, но не используете оператор назначения =. Сравните sqrsum, sumsqr = 0, 0 с sqrsum, sumsqr += x, x**2.

Возможно, вы хотели написать sqrsum, sumsqr = sqrsum+x, sumsqr+x**2.

2 голосов
/ 11 июля 2010

Вы также можете использовать inject

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

[править: спасибо комментаторам за указание: + стенография]

2 голосов
/ 11 июля 2010

почему бы просто не сделать { |x| sqrsum += x; sumsqr += x**2}

1 голос
/ 11 июля 2010

Вы хотите, чтобы

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...