2011-03-01 11 views
11

मैंने सोचा था किरूबी या रेल में, कभी-कभी वर्ग के अंदर और कभी-कभी कक्षा के बाहर "शामिल" क्यों होता है?

class ApplicationController < ActionController::Base 
    include Foo 

एक "mixin" जोड़ने के लिए है - ताकि फू मॉड्यूल में सभी तरीकों ApplicationController के तरीके के रूप में माना जाता है।

लेकिन अब मैं देख रहा हूँ कोड है कि है

include Bar 

class ApplicationController < ActionController::Base 
    include Foo 

तो क्यों यह ApplicationController के बाहर है? ApplicationController के अंदर डालने के अधिक सामान्य उपयोग से यह अलग कैसे है?

+0

'बार में शामिल करें' इस तरह की एक हानिकारक त्रुटि है - यह 'एप्लिकेशन कंट्रोलर' को जिस तरीके से आप चाहते हैं उसे बदल देगा, लेकिन एप्लिकेशन में हर दूसरी वस्तु को भी बदल देगा। –

उत्तर

15

हाँ, include Foo कक्षा के अंदर Foo उस वर्ग के पूर्वजों को जोड़ता है और इस प्रकार उन वर्गों के उदाहरणों के लिए उपलब्ध Foo के उदाहरण विधियों को बनाता है। किसी भी वर्ग परिभाषा include Foo की

बाहर Object के पूर्वजों को Foo जोड़ देगा। अर्थात। यह वही है जैसे आपने कक्षा की परिभाषा के अंदर include Foo किया था। ऐसा करने का उपयोग यह है कि Foo की सभी विधियां अब हर जगह उपलब्ध हैं।

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