回答:
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'
互いに近くにある複数の疑問符で読むのは簡単ではありません。
私が知っていることから
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
お役に立てば幸いです。