2011-02-10 11 views
6

एक मूर्ख, वाक्य-प्रश्न:रूबी असाइनमेंट सिंटेक्स

, असाइनमेंट ऑपरेटर वास्तव में एक समारोह है, तो जैसे

def value=(x) 
    @value = x 
end 

बाएं हाथ संकार्य और "=" के बीच एक रिक्ति के बिना, तो क्यों काम के रूप में (एक स्थान के साथ) test.value = एक्स बनाया जा सकता है, लेकिन विधि परिभाषा रूप में नहीं लिखा जा सकता है:

def value = (x) 
    @value = x 
end 
अंतरिक्ष के साथ

। क्या यह बस पार्सर द्वारा निर्धारित वाक्यविन्यास है?

+1

साथ ही आप पूछ सकते हैं, "अगर दूध सफेद है, क्यों आकाश नहीं है? .." –

उत्तर

6

def फ़ंक्शन नाम के लिए टोकन द्वारा वैकल्पिक रूप से एक तर्क सूची के बाद अनुसरण किया जाना चाहिए। तर्क सूची पर कोष्ठक वैकल्पिक है (उदा।, def value= x एक उपयुक्त परिभाषा है)। def value = (x)def जैसा दिखता है उसके बाद दो टोकन और फिर एक तर्क सूची, जो पार्स नहीं करती है।

+0

पार्सर बहुत चालाक है पता करने के लिए बयान है कि test.value = x दो पारित पैरामीटर के बाद एक टोकन नहीं है। यह विधि परिभाषा को समान रूप से क्यों नहीं पाता है? – inyourcorner

+0

@inyourcorner लेकिन आप अपने उदाहरण – Woot4Moo

+0

@inyourcorner में 'def' कीवर्ड पर निर्भर नहीं हैं: यह फ़ंक्शन परिभाषा से बिल्कुल अलग है। असाइनमेंट के लिए हैंडलर प्राप्त करने वाले ऑब्जेक्ट में मूल्य = विधियों की जांच करना जानता है (पार्सिंग शामिल नहीं है)। – cam

1

यह पार्सर/दुभाषिया जादू है।

जब दुभाषिया असाइनमेंट को मिलान करने वाली विधि की तलाश करता है।

मैं इस संबंध में आपके साथ सहमत हूं (लगभग), मुझे लगता है कि असाइनमेंट some.value= x ('मूल्य' और '=' के बीच की जगह के बिना हमेशा होना चाहिए।

स्काला कुछ ऐसा ही है, लेकिन एक अंडरस्कोर का उपयोग करता def value_= (x: X)

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