Как написать "if" без использования "then" или "end" в Ruby

StackOverflow https://stackoverflow.com/questions/631174

Вопрос

Я нашел три способа записать одно и то же условие в 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"

Я не понимаю:

  1. Почему тогда и конец необходимы в №3, и,
  2. Почему мне нужно изменить порядок, чтобы заставить # 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, чтобы сделать его более похожим на английский.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top