2012-05-24 11 views
9

प्रश्न के शीर्षक की भयंकरता यह है कि मैं हल करने की कोशिश कर रहा हूं। उदाहरण:रूबी मिश्रित के इंटरफ़ेस प्रदान करने के लिए "आवश्यक" विधियों को कैसे ढूंढें?

रूबी में

, Enumerable एक अर्थ में एक अंतरफलक है कि मैं कुछ को लागू करने और के रूप में यह दस्तावेज़ कर सकते हैं:

def myfancymethod(please_pass_me_an_Enumerable_here) 

लेकिन दूसरी ओर, Enumerable इंटरफ़ेस है कि के प्रवर्धन की तरह है #each इसके तरीकों में से एक के रूप में। अगर मैं एक वर्ग

class Foo 
    def each 
    :bar 
    end 
end 

रूबी के साथ अपरिचित उन लोगों के लिए, यदि आप mixin Enumerable मॉड्यूल एक कक्षा में, आपको लगता है कि केवल #each विधि पर भरोसा करते हैं #map, #select तरह बातें प्रदान करने के लिए तरीकों के दर्जनों मिल, आदि

मैं कह सकता हूं कि मेरी Foo कक्षा संख्यात्मक-सक्षम या संख्यात्मक-संगत या क्या है? कौन-से शब्द का उत्तर का वर्णन "क्या यह एक Enumerable होने के लिए ले करता है?", रूबी में, इसी प्रकार

"ठीक है आप #each करना होगा"

(Array.new.methods - Object.new.methods).size # 111 

कि कि नकली किसी सरणी के लिए इसका मतलब यह है इंटरफेस, मुझे 111 तरीकों को लागू करना है? कोई रास्ता नहीं, लेकिन मैं कैसे पता लगा सकता हूं कि ऐरे के "सार" क्या तरीके हैं। क्या यह सिर्फ #[], #[]= और #size है? इसका अर्थ कैसे बनाया जाए?

+1

क्या इस शब्द के बारे में आपका प्रश्न है? या "आवश्यक" तरीकों को कैसे ढूंढें? –

+1

मुझे लगता है कि इंटरफेस वाली भाषा में जवाब देना बहुत आसान होगा। – Russell

+0

@ बाद में सर्जियो टुल्वेंटसेव अद्भुत होगा। मुझे अभी भी पता नहीं है कि "आवश्यक" ActiveRecord या Array विधियां क्या हैं। – ulver

उत्तर

4

आपको this feature request में रुचि हो सकती है, जो व्यापक रूप से उपयोग किए जाने वाले Hash कक्षा के आर्किटेक्चर में कुछ सुधार सुझाती है।

दुखद सत्य भूल गया है। इस बिंदु पर रूबी के पास ऐसा कुछ नहीं है। Enumerable और Comparable जितना करीब हो उतना करीब है और उनका "अनुबंध" केवल दस्तावेज़ीकरण का विषय है।

वैसे, मुझे विश्वास है कि #size अन्य विधि है कि Enumerable इसका उपयोग कर सकते हैं, हालांकि यह वैकल्पिक है।

5

मुझे "contract" शब्द के बारे में लगता है। उदाहरण के लिए, संख्यात्मक अनुबंध, "मुझे #each दें और मैं आपको ये फैंसी विधियां दूंगा"।

+0

क्या वहां कोई आम सूची है जो मौजूदा/मौजूदा "अनुबंध" है? मैंने रूबी दुनिया में ऐसा कुछ भी नहीं देखा। अब मैं देख सकता हूं कि जावा में यह ट्रैकिंग अनावश्यक कारण है क्योंकि आप केवल "नई संख्यात्मक (प्रत्येक स्रोत)" जैसे वर्ग को प्रकाशित करते हैं या विरासत करते हैं। – ulver

+0

इसके अलावा, "अनुबंध द्वारा डिजाइन" बहुत अच्छा है, लेकिन यह पूर्व/पोस्ट स्थितियों/आविष्कारों आदि के पूरे विज्ञान में जाता है। मुझे बस "आवश्यक" इंटरफेस के सेट में दिलचस्पी है। – ulver

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

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