Відповіді:
Видалити 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, вам потрібен оператор.
У Рубі, проте, if
це вираз. Насправді в Ruby все є виразом, тому воно вже може повернути значення. Немає потреби в умовному операторі навіть існувати , не кажучи вже про його використання.
BTW: прийнято називати методи, які використовуються для того, щоб задавати питання із знаком питання в кінці, як це:
@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'
якщо item.rigged
є істинним. Однорядковий, якщо або якщо заяви не повертаються, 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 (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 вірно, він поверне "Так", інакше поверне "Ні"