Yanıtlar:
Kaldır ifdanif @item.rigged ? "Yes" : "No"
Üçlü operatör formu var condition ? if_true : if_false
s/that/not that :)
Ruby'de, thenbir ififadenin koşulu ve kısmı bir ifade ayırıcısı (yani ;veya bir yeni satır) veya thenanahtar kelime ile ayrılmalıdır .
Yani, bunların hepsi işe yarayacaktı:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
Ruby'de şartlı bir operatör de var, ancak bu tamamen gereksiz. C: o bir operatör olduğu için koşullu operatör, C gereklidir if, bir değer döndüremez dolayısıyla bir ifadedir ve böylece bir değer döndürmek istiyorsanız, bir şey kullanmaya gerek olabilir bir değeri döndürür. Ve C'de bir değer döndürebilen tek şey işlevler ve operatörlerdir ve ifC'de bir işlev yapmak imkansız olduğu için bir operatöre ihtiyacınız vardır.
Ancak Ruby'de ifbir ifade var. Aslında, her şey Ruby'deki bir ifadedir, bu yüzden zaten bir değer döndürebilir. Koşullu operatörün , kullanmasına izin vermeksizin , var olmasına bile gerek yoktur .
BTW: Sonunda soru işareti olan bir soru sormak için kullanılan yöntemleri şöyle adlandırmak gelenekseldir:
@item.rigged?
Bu, Ruby'de koşullu işleci kullanma ile ilgili başka bir sorunu gösterir:
@item.rigged? ? 'Yes' : 'No'
Birbirine yakın çok sayıda soru işaretiyle okumak zor.
Aşağıdaki durumlarda bir satır:
<statement> if <condition>
Senin durumun:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.riggedda önlemek için!
nilyerine döndürdüğü için farklıdır . Koşul karşılanmadığında ifadeler geri dönerse veya dönmezse tek satır . 'Yes'item.riggednil
Bildiğim kadarıyla
3 tek katlı
a = 10 if <condition>misal:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>misal:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>misal:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
Umut ediyorum bu yardım eder.
Hem kabuk hem de C tek hat yapıları çalışır (yakut 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"
başka koşul üçlü operatörle karşılanabiliyorsa
@item.rigged? ? 'Yes' : 'No'
Kullanabilirsiniz ----
(@ item.rigged)? "Evet Hayır"
@ İtem.rigged doğru ise, 'Evet' döndürür, aksi takdirde 'Hayır' döndürür