Jika kondisi Anda diakhiri dengan '?' apakah mungkin untuk menjatuhkannya? Yaitu jika kondisinya adalah @ customer.sales.present? bisakah kamu menjatuhkan '?' ... jangan khawatir. Menemukan beberapa kode yang saya miliki dan mengujinya. Jawabannya adalah 'tidak'
Jay Killeen
@ JayKilleen Anda benar. Ruby adalah semua tentang trik pintar, tapi itu yang pintar (:
Nikita Rybak
1
@NikitaRybak s/that/not that :)
Austin
180
Di Ruby, kondisi dan thenbagian dari ifekspresi harus dipisahkan oleh pemisah ekspresi (yaitu ;atau baris baru) atau thenkata kunci.
Ada juga operator kondisional di Ruby, tetapi itu sama sekali tidak perlu. Operator bersyarat diperlukan dalam C, karena itu adalah operator: dalam C, ifadalah pernyataan dan dengan demikian tidak dapat mengembalikan nilai, jadi jika Anda ingin mengembalikan nilai, Anda perlu menggunakan sesuatu yang dapat mengembalikan nilai. Dan satu-satunya hal dalam C yang dapat mengembalikan nilai adalah fungsi dan operator, dan karena tidak mungkin untuk membuat iffungsi di C, Anda memerlukan operator.
Di Ruby, bagaimanapun, ifadalah sebuah ekspresi. Faktanya, semuanya adalah ekspresi di Ruby, sehingga sudah dapat mengembalikan nilai. Bahkan operator kondisional tidak perlu ada , apalagi menggunakannya.
BTW: sudah biasa menyebutkan metode yang digunakan untuk mengajukan pertanyaan dengan tanda tanya di akhir, seperti ini:
@item.rigged?
Ini menunjukkan masalah lain dengan menggunakan operator kondisional di Ruby:
@item.rigged??'Yes':'No'
Sangat sulit untuk membaca dengan beberapa tanda tanya yang dekat satu sama lain.
Solusi ini berbeda karena ia mengembalikan nilbukan 'Yes'jika item.riggedbenar. Baris tunggal jika atau kecuali pernyataan kembali niljika kondisinya tidak terpenuhi.
Anjing Ini adalah jawaban terbaik - Saya suka betapa ringkasnya kontras semua tiga cara. Terima kasih!
MrVocabulary
7
Konstruksi shell dan C one-line berfungsi (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"
Jawaban:
Hapus
if
dariif @item.rigged ? "Yes" : "No"
Operator ternary memiliki formulir
condition ? if_true : if_false
sumber
s/that/not that
:)Di Ruby, kondisi dan
then
bagian dariif
ekspresi harus dipisahkan oleh pemisah ekspresi (yaitu;
atau baris baru) atauthen
kata kunci.Jadi, semua ini akan berhasil:
Ada juga operator kondisional di Ruby, tetapi itu sama sekali tidak perlu. Operator bersyarat diperlukan dalam C, karena itu adalah operator: dalam C,
if
adalah pernyataan dan dengan demikian tidak dapat mengembalikan nilai, jadi jika Anda ingin mengembalikan nilai, Anda perlu menggunakan sesuatu yang dapat mengembalikan nilai. Dan satu-satunya hal dalam C yang dapat mengembalikan nilai adalah fungsi dan operator, dan karena tidak mungkin untuk membuatif
fungsi di C, Anda memerlukan operator.Di Ruby, bagaimanapun,
if
adalah sebuah ekspresi. Faktanya, semuanya adalah ekspresi di Ruby, sehingga sudah dapat mengembalikan nilai. Bahkan operator kondisional tidak perlu ada , apalagi menggunakannya.BTW: sudah biasa menyebutkan metode yang digunakan untuk mengajukan pertanyaan dengan tanda tanya di akhir, seperti ini:
Ini menunjukkan masalah lain dengan menggunakan operator kondisional di Ruby:
Sangat sulit untuk membaca dengan beberapa tanda tanya yang dekat satu sama lain.
sumber
Satu baris jika:
Kasus Anda:
sumber
"No" unless @item.rigged
untuk mencegah!
nil
bukan'Yes'
jikaitem.rigged
benar. Baris tunggal jika atau kecuali pernyataan kembalinil
jika kondisinya tidak terpenuhi.Dari yang aku tahu
3 satu baris
a = 10 if <condition>
contoh:
a = 10 unless <condition>
contoh:
a = <condition> ? <a> : <b>
contoh:
Saya harap ini membantu.
sumber
Konstruksi shell dan C one-line berfungsi (ruby 1.9.3p429):
sumber
jika kondisi lain dapat ditutupi dengan operator ternary
sumber
Untuk kesederhanaan, Jika Anda perlu default ke beberapa nilai jika nil Anda dapat menggunakan:
sumber
Kamu bisa memakai ----
(@ item.rigged)? "Ya Tidak"
Jika @ item.rigged benar, ia akan mengembalikan 'Ya' jika tidak maka akan kembali 'Tidak'
sumber