Как написать "if" без использования "then" или "end" в Ruby
-
08-07-2019 - |
Вопрос
Я нашел три способа записать одно и то же условие в Ruby:
#1
if 1==1
puts "true"
end
#2
puts "true" if 1==1
#3
if 1==1 then puts "true" end
Почему я не могу этого сделать?
#4
if 1==1 puts "true"
Я не понимаю:
- Почему тогда и конец необходимы в №3, и,
- Почему мне нужно изменить порядок, чтобы заставить # 2 работать.
Утверждение № 4 кажется наиболее естественным способом написать это.Я не понимаю, почему это невозможно.
Решение
" если x, то y end
" синтаксис предназначен для многострочных условных выражений, в то время как " y if x
" Форма предназначена для кратких однострочных условных выражений. then
необходим в первом случае, чтобы сообщить Ruby, что условие выполнено (поскольку Ruby не требует таких символов, как C), а end
необходимо, чтобы сообщить Ruby что весь блок if
окончен (поскольку он может состоять из нескольких строк).
Вы можете заменить then
точкой с запятой, потому что конец строки также сигнализирует об окончании условия. Вы не можете избавиться от end
с помощью многострочного if
. Либо используйте вторую форму или троичный оператор, если вы хотите получить краткую однострочную строку.
Например, предположим,
x = true
следующее оценивает true и возвращает y
x ? y :
=> y
Точно так же это оценивает ложь и ничего не возвращает
!x ? y :
=>
добавьте термин после ':' для остального случая
!x ? y : z
=> z
Другие советы
Дело в том, что оба способа на самом деле являются естественным способом мышления:
если это правда, то сделайте что-нибудь
сделайте что-нибудь, если это правда
Видишь?Таким образом, Ruby пытается приблизиться к английскому синтаксису.Тот Самый конец просто необходимо завершить блок, в то время как во второй версии блок уже закрыт с помощью если.
Чтобы на самом деле ответить на ваш вопрос, я думаю, что нет никаких шансов получить тогда и конец Удалено.Помните Pascal / Delphi?У вас есть тогда там тоже.Отсутствие этого типично только для языков в стиле Си.
Как насчет использования двоеточия вместо этого? http://www.java2s.com/Code/Ruby/Statement/layoutanifstathethebyby НТМ р>
Существуют различные способы закорачивания, если вы этого хотите.
Условный оператор является лишь частью синтаксиса Ruby, чтобы сделать его более похожим на английский.