Ruby Menetapkan string Benar dan Salah?
Apakah Anda dapat menetapkan string ke benar dan salah?
misalnya saya mulai dengan hash:
shopping_list = {
"milk" => false,
"eggs" => false,
"jalapenos" => true
}
puts "Here is your Shopping List:"
shopping_list.each do |key, value|
puts "#{key} - #{value}"
end
Saya ingin keluarannya menempatkan "dibeli" untuk truedan "tidak dibeli" untuk false.
Jawaban
Gunakan inline if atau suatu ternary if operator:
shopping_list = {
"milk" => false,
"eggs" => false,
"jalapenos" => true
}
puts "Here is your Shopping List:"
shopping_list.each do |key, value|
puts "#{key} - #{if value then 'purchased' else 'not purchased' end}"
# or this:
# puts "#{key} - #{value ? 'purchased' : 'not purchased'}"
end
Cetakan:
Here is your Shopping List:
milk - not purchased
eggs - not purchased
jalapenos - purchased
Operator mana yang akan digunakan: operator ternary ( ?:) atau if/then/else/end?
Saya memilih di sini if/then/else/end, tetapi mencantumkan kedua opsi sebagai dapat diterima. Ini adalah soal gaya yang mana yang Anda pilih.
Beberapa pengguna Ruby Stack Overflow lebih suka menggunakan file reguler if ... then ... else ... end. Ini lebih panjang, tetapi lebih jelas dan lebih idiomatis. Lihat, sebagai contoh, jawaban-jawaban ini:
https://stackoverflow.com/a/2175392/967621
https://stackoverflow.com/a/4253250/967621
Pengguna Stack Overflow lainnya lebih suka ?:, yang lebih ringkas dan jelas, jika Anda terbiasa. Perhatikan juga bahwa Ruby Style Guide setuju:
Lebih suka operator terner (
?:) daripadaif/then/else/endkonstruksi. Ini lebih umum dan jelas lebih ringkas.
# bad
result = if some_condition then something else something_else end
# good
result = some_condition ? something : something_else
Apakah ini menjawab pertanyaan Anda?
shopping_list.each do |key, value|
puts "#{key} - #{purchased?(value)}"
end
def purchased?(boolean)
boolean ? 'purchased' : 'not purchased'
end
Saya ingin keluarannya menempatkan "dibeli" untuk benar dan "tidak dibeli" untuk salah.
Anda biasanya akan memulai dengan ifekspresi :
shopping_list.each do |key, value|
if value
puts "#{key} - purchased"
else
puts "#{key} - not purchased"
end
end
Nanti, Anda dapat mencoba menghapus bagian kode duplikat.
Apakah Anda dapat menetapkan string ke benar dan salah?
Kedengarannya seperti pemetaan. Anda dapat menggunakan hash lain:
states = {
true => 'purchased',
false => 'not purchased'
}
Dan lihat hash itu saat mencetak daftar belanja Anda:
shopping_list.each do |key, value|
puts "#{key} - #{states[value]}"
end
Di sini, states[value]mengambil nilai keluaran valuedari stateshash.