Ruby Menetapkan string Benar dan Salah?

Sep 02 2020

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

2 TimurShtatland Sep 02 2020 at 16:39

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 ( ?:) daripada if/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
3 Spikie Sep 02 2020 at 16:37

Apakah ini menjawab pertanyaan Anda?

shopping_list.each do |key, value|
   puts "#{key} - #{purchased?(value)}"
end


def purchased?(boolean)
  boolean ? 'purchased' : 'not purchased' 
end
2 Stefan Sep 02 2020 at 16:43

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.