रूबी निरुपित सच और गलत तार?

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

किस ऑपरेटर का उपयोग करना है: टर्नरी ऑपरेटर ( ?:) या if/then/else/end?

मैंने यहां चुना if/then/else/end, लेकिन स्वीकार्य के रूप में दोनों विकल्पों को सूचीबद्ध किया। यह शैली का विषय है जिसे आप चुनते हैं।

कुछ स्टैक ओवरफ्लो रूबी उपयोगकर्ता एक नियमित उपयोग करना पसंद करते हैं if ... then ... else ... end। यह लंबा है, लेकिन अधिक स्पष्ट और अधिक मुहावरेदार है। उदाहरण के लिए, ये उत्तर देखें:
https://stackoverflow.com/a/2175392/967621
https://stackoverflow.com/a/4253250/967621

अन्य स्टैक ओवरफ्लो उपयोगकर्ता पसंद करते हैं ?:, जो अधिक संक्षिप्त और स्पष्ट है, यदि आप इसका उपयोग करते हैं। यह भी ध्यान दें कि रूबी स्टाइल गाइड इससे सहमत है:

निर्माणों ?:पर टर्नरी ऑपरेटर ( ) को प्राथमिकता दें 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]आउटपुट वैल्यू प्राप्त करता है ।valuestates