2009-03-10 16 views
8

में उपयोग करते हुए 'फिर' या 'अंत' के बिना मैंने पाया तीन तरीके रूबी में एक ही हालत में लिखने के लिए:कैसे लिखने के लिए 'अगर' रूबी

#1 
if 1==1 
    puts "true" 
end 

#2 
puts "true" if 1==1 

#3 
if 1==1 then puts "true" end 

क्यों मैं ऐसा नहीं कर सकते?

#4 
if 1==1 puts "true" 

मुझे समझ नहीं आता:

  1. क्यों तो और अंत # 3 में की जरूरत है, और,
  2. क्यों मैं करने के लिए # 2 प्राप्त करने के लिए आदेश को बदलने की जरूरत काम।

स्टेटमेंट # 4 इसे लिखने का सबसे स्वाभाविक तरीका प्रतीत होता है। मुझे समझ में नहीं आता कि यह क्यों संभव नहीं है।

उत्तर

19

"if x then y end" वाक्यविन्यास मल्टीलाइन सशर्त के लिए है जबकि "y if x" फ़ॉर्म संक्षिप्त एकल-पंक्ति सशर्त बयान के लिए है। रूबी को यह बताने के लिए पहले मामले में then आवश्यक है कि स्थिति खत्म हो गई है (चूंकि रूबी को सी जैसे माता-पिता की आवश्यकता नहीं होती है), और end रूबी को यह बताने के लिए जरूरी है कि पूरे if ब्लॉक खत्म हो गया है (क्योंकि यह कई लाइनें हो सकती है)।

आप अर्धविराम के साथ then को प्रतिस्थापित कर सकते हैं, क्योंकि एक अंत-रेखा भी स्थिति के अंत को संकेत देती है। आप मल्टीलाइन if के साथ end से छुटकारा नहीं पा सकते हैं। यदि आप संक्षिप्त एक-लाइनर चाहते हैं तो या तो दूसरा फॉर्म या टर्नरी ऑपरेटर का उपयोग करें।

उदाहरण के लिए, मान लीजिए

x = true 

निम्नलिखित सच

!x ? y : 
=> 

का मूल्यांकन करेंगे, और वापसी y

x ? y : 
=> y 

इसी तरह, यह गलत का मूल्यांकन करेंगे और वापसी में कुछ भी नहीं एक शब्द जोड़ने अन्य मामलों के लिए ':' के बाद

!x ? y : z 
=> z 
+0

में 10 चीजों के बेटे को अवगत होने के लिए देखें "चूंकि रूबी को सी जैसे माता-पिता की आवश्यकता नहीं है" - मैं इसे भूल गया। ठीक है, समझ में आता है क्यों 'फिर' की आवश्यकता है। अर्धविराम के बारे में नहीं पता था - थोड़ा अजीब लग रहा है लेकिन यह काम करता है। बहुत उपयोगी। धन्यवाद। अर्धविराम टिप के लिए –

+0

+1। –

4

बात यह है कि दोनों तरीकों से वास्तव में एक प्राकृतिक तरीके से सोचने के लिए कर रहे हैं:

अगर यह सच है तो अगर यह सच है

देखें कुछ

कुछ करना? रूबी इस तरह से अंग्रेजी वाक्यविन्यास के करीब पाने की कोशिश करता है। अंत ब्लॉक को समाप्त करने के लिए जरूरी है, जबकि दूसरे संस्करण में, के साथ ब्लॉक पहले ही बंद हो गया है यदि

वास्तव में अपने प्रश्न का उत्तर करने के लिए, मुझे लगता है कि तो और अंत निकलवाने के लिए कोई संभावना नहीं है। पास्कल/डेल्फी याद रखें? आपके पास है, फिर भी है। यह केवल सी-स्टाइल भाषाओं के लिए विशिष्ट नहीं है।

0

इस तरह के बजाय एक कोलन का उपयोग करने के बारे में क्या? http://www.java2s.com/Code/Ruby/Statement/layoutanifstatementisbyreplacingthethenwithacolon.htm

यदि आप ऐसा करना चाहते हैं तो शॉर्ट सर्किट के कई तरीके हैं।

सशर्त कथन रूबी वाक्यविन्यास का हिस्सा है जो इसे और अधिक अंग्रेजी बनाने के लिए है।

+0

इसके लायक होने के लिए, कोलन का यह उपयोग रुबी 1.9 के रूप में चला गया है - वही मामलों के मामले में परीक्षण के लिए। डेविड ब्लैक के "रूबी 1.9" – Telemachus

संबंधित मुद्दे