2012-03-09 8 views
5

मुझे रूबी में पता है, लगभग सबकुछ एक अभिव्यक्ति है। यहां तक ​​कि if-else कथन, case कथन, असाइनमेंट स्टेटमेंट, लूप स्टेटमेंट रूबी में एक अभिव्यक्ति है।रूबी में बयान और अभिव्यक्ति का क्या अंतर है?

तो मैं रुबी के दृष्टिकोण से जानना चाहता हूं, कथन और अभिव्यक्ति के बीच क्या अंतर है?

+2

जैसा कि आपने सही ढंग से देखा है, रुबी में कोई बयान नहीं है, इसलिए सवाल वास्तव में समझ में नहीं आता है। –

उत्तर

4

रूबी के बीच कोई अंतर नहीं है। सब कुछ एक मूल्य के लिए मूल्यांकन करता है ताकि सब कुछ एक अभिव्यक्ति है।

1

अभिव्यक्तियों को वाक्य के छोटे हिस्सों के रूप में सोचें। बयान के बारे में सोचें कि पूरा वाक्य या विचार। आपकी विधि या लूप में एक पंक्ति एक अभिव्यक्ति हो सकती है, और उन अभिव्यक्तियों के समूह को बंद लूप या विधि में एक कथन के रूप में माना जा सकता है।

यह कम या ज्यादा अवधारणात्मक व्यक्तिपरक है। जैसा कि निकलास बी ने सही ढंग से बताया (और आपने सही ढंग से देखा)।

क्या कोई समस्या है कि आप सीधे काम कर रहे हैं जिससे आप इसे देख सकें?

आप लोगों को यह भी सुनेंगे कि "रूबी में सबकुछ एक वस्तु है" सब कुछ एक अभिव्यक्ति है।

+0

मैं कहूंगा कि मुख्य वैचारिक अंतर यह है कि किसी चीज़ का मूल्य उपयोग या त्याग दिया जाता है या नहीं। –

2

Ruby hacking guide से:

इसके अलावा, समारोह और वर्ग परिभाषाओं को आम तौर पर हालांकि ऐसी लिस्प और योजना के रूप में भाषाओं में बयान कर रहे हैं, के बाद से सब कुछ एक अभिव्यक्ति है, वे पहली जगह में बयान नहीं है। रुबी इस संबंध में लिस्प के डिजाइन के करीब है।

ये कथन के व्याकरण नियम हैं, जहां आप भाषा कार्यान्वयन में एक बयान क्या देख सकते हैं (क्रमबद्ध)। expr नियम पर ध्यान दें कि इसका मतलब है कि एक stmnt एक expr हो सकता है। एक expr एक stmt नहीं हो सकता है।

stmt  : kALIAS fitem fitem 
      | kALIAS tGVAR tGVAR 
      | kALIAS tGVAR tBACK_REF 
      | kALIAS tGVAR tNTH_REF 
      | kUNDEF undef_list 
      | stmt kIF_MOD expr_value 
      | stmt kUNLESS_MOD expr_value 
      | stmt kWHILE_MOD expr_value 
      | stmt kUNTIL_MOD expr_value 
      | stmt kRESCUE_MOD stmt 
      | klBEGIN ‘{’ compstmt ‘}’ 
      | klEND ‘{’ compstmt ‘}’ 
      | lhs ‘=’ command_call 
      | mlhs ‘=’ command_call 
      | var_lhs tOP_ASGN command_call 
      | primary_value ‘[’ aref_args ‘]’ tOP_ASGN command_call 
      | primary_value ‘.’ tIDENTIFIER tOP_ASGN command_call 
      | primary_value ‘.’ tCONSTANT tOP_ASGN command_call 
      | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call 
      | backref tOP_ASGN command_call 
      | lhs '=' mrhs_basic 
      | mlhs '=' mrhs 
      | expr 
संबंधित मुद्दे