Ответы:
Удалить ifизif @item.rigged ? "Yes" : "No"
Тернарный оператор имеет форму condition ? if_true : if_false
s/that/not that :)
В Ruby условие и thenчасть ifвыражения должны быть разделены разделителем выражений (т. ;Е. Или символом новой строки) или thenключевым словом.
Итак, все это будет работать:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
В Ruby также есть условный оператор, но это совершенно не нужно. Условный оператор необходим в C, поскольку он является оператором: в C он ifявляется оператором и, следовательно, не может возвращать значение, поэтому, если вы хотите вернуть значение, вам нужно использовать что-то, что может вернуть значение. И единственные вещи в C, которые могут возвращать значение, это функции и операторы, и поскольку невозможно создать ifфункцию в C, вам нужен оператор.
В Ruby, однако, ifесть выражение. Фактически, все является выражением в Ruby, поэтому оно уже может возвращать значение. Нет необходимости даже в существовании условного оператора , не говоря уже о его использовании.
КСТАТИ: обычно принято называть методы, которые используются, чтобы задать вопрос с вопросительным знаком в конце, например:
@item.rigged?
Это показывает еще одну проблему с использованием условного оператора в Ruby:
@item.rigged? ? 'Yes' : 'No'
Это просто трудно читать с несколькими вопросительными знаками, которые находятся близко друг к другу.
Одна строка, если:
<statement> if <condition>
Ваш случай:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.riggedчтобы предотвратить!
nilвместо 'Yes'if значение item.riggedtrue. Однострочный, если или если операторы не возвращаются, nilесли условие не выполняется.
Из того, что я знаю
3 однострочника
a = 10 if <condition>пример:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>пример:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>пример:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
Я надеюсь, что это помогает.
Обе конструкции и оболочка 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"
если еще условие может быть покрыто троичным оператором
@item.rigged? ? 'Yes' : 'No'
Ты можешь использовать ----
(@ item.rigged)? "Да нет"
Если @ item.rigged имеет значение true, он вернет «Да», иначе он вернет «Нет»