Если ваше условие оканчивается на '?' можно ли его уронить? Т.е. если условие @ customer.sales.present? Вы можете бросить «?»? ... не волнуйся Нашел какой-то код и проверил его. Ответ «нет»
Джей Киллин
@JayKilleen Ты прав. Рубин все о хитрых трюков, но это что умный (:
Никита Рыбак
1
@NikitaRybak s/that/not that :)
Остин
180
В Ruby условие и thenчасть ifвыражения должны быть разделены разделителем выражений (т. ;Е. Или символом новой строки) или thenключевым словом.
В Ruby также есть условный оператор, но это совершенно не нужно. Условный оператор необходим в C, поскольку он является оператором: в C он ifявляется оператором и, следовательно, не может возвращать значение, поэтому, если вы хотите вернуть значение, вам нужно использовать что-то, что может вернуть значение. И единственные вещи в C, которые могут возвращать значение, это функции и операторы, и поскольку невозможно создать ifфункцию в C, вам нужен оператор.
В Ruby, однако, ifесть выражение. Фактически, все является выражением в Ruby, поэтому оно уже может возвращать значение. Нет необходимости даже в существовании условного оператора , не говоря уже о его использовании.
КСТАТИ: обычно принято называть методы, которые используются, чтобы задать вопрос с вопросительным знаком в конце, например:
@item.rigged?
Это показывает еще одну проблему с использованием условного оператора в Ruby:
@item.rigged??'Yes':'No'
Это просто трудно читать с несколькими вопросительными знаками, которые находятся близко друг к другу.
Это решение отличается тем, что оно возвращает nilвместо 'Yes'if значение item.riggedtrue. Однострочный, если или если операторы не возвращаются, nilесли условие не выполняется.
Собака Это лучший ответ - мне нравится, как лаконично это контрастирует во всех трех отношениях. Спасибо!
MrVocabulary
7
Обе конструкции и оболочка C-line работают (ruby 1.9.3p429):
# Shell format
irb(main):022:0>true&&"Yes"||"No"=>"Yes"
irb(main):023:0>false&&"Yes"||"No"=>"No"# C format
irb(main):024:0>true?"Yes":"No"=>"Yes"
irb(main):025:0>false?"Yes":"No"=>"No"
Ответы:
Удалить
if
изif @item.rigged ? "Yes" : "No"
Тернарный оператор имеет форму
condition ? if_true : if_false
источник
s/that/not that
:)В Ruby условие и
then
частьif
выражения должны быть разделены разделителем выражений (т.;
Е. Или символом новой строки) илиthen
ключевым словом.Итак, все это будет работать:
В Ruby также есть условный оператор, но это совершенно не нужно. Условный оператор необходим в C, поскольку он является оператором: в C он
if
является оператором и, следовательно, не может возвращать значение, поэтому, если вы хотите вернуть значение, вам нужно использовать что-то, что может вернуть значение. И единственные вещи в C, которые могут возвращать значение, это функции и операторы, и поскольку невозможно создатьif
функцию в C, вам нужен оператор.В Ruby, однако,
if
есть выражение. Фактически, все является выражением в Ruby, поэтому оно уже может возвращать значение. Нет необходимости даже в существовании условного оператора , не говоря уже о его использовании.КСТАТИ: обычно принято называть методы, которые используются, чтобы задать вопрос с вопросительным знаком в конце, например:
Это показывает еще одну проблему с использованием условного оператора в Ruby:
Это просто трудно читать с несколькими вопросительными знаками, которые находятся близко друг к другу.
источник
Одна строка, если:
Ваш случай:
источник
"No" unless @item.rigged
чтобы предотвратить!
nil
вместо'Yes'
if значениеitem.rigged
true. Однострочный, если или если операторы не возвращаются,nil
если условие не выполняется.Из того, что я знаю
3 однострочника
a = 10 if <condition>
пример:
a = 10 unless <condition>
пример:
a = <condition> ? <a> : <b>
пример:
Я надеюсь, что это помогает.
источник
Обе конструкции и оболочка C-line работают (ruby 1.9.3p429):
источник
если еще условие может быть покрыто троичным оператором
источник
Для простоты, если вам нужно по умолчанию какое-то значение, если ноль, вы можете использовать:
источник
Ты можешь использовать ----
(@ item.rigged)? "Да нет"
Если @ item.rigged имеет значение true, он вернет «Да», иначе он вернет «Нет»
источник