Ruby กำหนดสตริงจริงและเท็จ?

Sep 02 2020

คุณสามารถกำหนดสตริงให้เป็นจริงและเท็จได้หรือไม่?

ตัวอย่างเช่นฉันเริ่มต้นด้วยแฮช:

shopping_list = {
  "milk" => false,
  "eggs" => false,
  "jalapenos" => true
}

puts "Here is your Shopping List:"

shopping_list.each do |key, value|
  puts "#{key} - #{value}"
end

ผมก็อยากออกไปทำให้ "ซื้อ" สำหรับtrueและ "ไม่ได้ซื้อ" falseสำหรับ

คำตอบ

2 TimurShtatland Sep 02 2020 at 16:39

ใช้แบบอินไลน์if หรือ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

พิมพ์:

Here is your Shopping List:
milk - not purchased
eggs - not purchased
jalapenos - purchased

ตัวดำเนินการใดที่จะใช้: ตัวดำเนินการ ternary ( ?:) หรือif/then/else/end?

ฉันเลือกที่นี่if/then/else/endแต่ระบุทั้งสองตัวเลือกว่ายอมรับได้ เป็นเรื่องของสไตล์ที่คุณเลือก

if ... then ... else ... endผู้ใช้บางคนกองมากเกินทับทิมชอบที่จะใช้เป็นประจำ มันยาวกว่า แต่ชัดเจนและเป็นสำนวนมากขึ้น ดูตัวอย่างคำตอบเหล่านี้:
https://stackoverflow.com/a/2175392/967621
https://stackoverflow.com/a/4253250/967621

ผู้ใช้ Stack Overflow คนอื่นชอบ?:ซึ่งจะกระชับและชัดเจนกว่าหากคุณคุ้นเคย โปรดทราบว่าThe Ruby Style Guideยอมรับ:

ชอบตัวดำเนินการ ternary ( ?:) มากกว่าif/then/else/endโครงสร้าง เป็นเรื่องธรรมดาและกระชับมากขึ้นอย่างเห็นได้ชัด

# 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

สิ่งนี้ตอบคำถามของคุณหรือไม่?

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

ฉันต้องการให้เอาต์พุตระบุว่า "ซื้อ" เป็นจริงและ "ไม่ได้ซื้อ" เป็นเท็จ

โดยทั่วไปคุณจะเริ่มต้นด้วยifนิพจน์ :

shopping_list.each do |key, value|
  if value
    puts "#{key} - purchased"
  else
    puts "#{key} - not purchased"
  end
end

ในภายหลังคุณสามารถลองลบส่วนรหัสที่ซ้ำกันได้


คุณสามารถกำหนดสตริงให้เป็นจริงและเท็จได้หรือไม่?

ฟังดูเหมือนเป็นการทำแผนที่ คุณสามารถใช้แฮชอื่น:

states = {
  true => 'purchased',
  false => 'not purchased'
}

และอ้างถึงแฮชนั้นเมื่อพิมพ์รายการช้อปปิ้งของคุณ:

shopping_list.each do |key, value|
  puts "#{key} - #{states[value]}"
end

ที่นี่states[value]ดึงค่าเอาต์พุตสำหรับvalueจากstatesแฮช