Руби - переводы строки и операторы - PullRequest
11 голосов
/ 11 февраля 2010

Рассмотрим следующий код:

x = 4
y = 5
z = (y + x)

puts z

Как и следовало ожидать, вывод будет 9. Если вы вводите новую строку:

x = 4
y = 5
z = y
+ x

puts z

Затем выводит 5. Это имеет смысл, поскольку оно интерпретируется как два отдельных утверждения (z = y и +x).

Тем не менее, я не понимаю, как это работает, когда у вас есть новая строка в скобках:

x = 4
y = 5
z = (y
+ x)

puts z

Выход 4. Почему?

Ответы [ 3 ]

12 голосов
/ 11 февраля 2010

(Отказ от ответственности: я вообще не программист на Ruby. Это просто дикое предположение.)

С паренсом вы получаете z, которому присваивается значение

y
+x

Что соответствует значению последнего выполненного оператора.

4 голосов
/ 11 февраля 2010

Завершите строку символом \, чтобы продолжить выражение на следующей строке. Это дает правильный вывод:

x = 4
y = 5
z = (y \
  + x)
puts z

выходы 9

Я не знаю, почему результат неожиданный, без выхода из новой строки. Я только что научился никогда этого не делать.

3 голосов
/ 11 февраля 2010

Ну, вам не понадобится экранирующий символ \, если ваши строки заканчиваются оператором

a = 4
b = 5
z = a +
    b

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