मुझे अपने मार्गों को कॉल करते समय लापता उदाहरणों और nilClass त्रुटियों के साथ कोई समस्या हो रही है। स्रोत के चारों ओर घूमने के बाद ऐसा लगता है कि gener_method कॉल मूल रूप से प्रारंभिक विधि के ब्लॉक का उपयोग करके एक नई विधि बनाता है।सिनात्रा के मार्ग विधियों में संदर्भ की कमी के आसपास काम करना
get "/" do
@some_local_instance.do_something()
end
तो उपरोक्त विधि में वहाँ बहुत अच्छी तरह से है कि वर्ग कहा जाता some_local_instance के भीतर एक स्थानीय चर, हो सकता है लेकिन जब रटना वास्तव में मूल्यांकन किया जाता है यह जहां विधि परिभाषित किया गया था के रूप में कोई संदर्भ है, इसलिए यह असफल हो जायेगी।
कारण मैं पूछता हूं क्योंकि मेरी लिपि के हिस्से के रूप में मेरे पास बाहरी कक्षाएं हैं जो सिनात्रा लोड होने पर लोड की जाती हैं और जब उन मार्गों को बुलाया जाता है तो मुझे इन कक्षाओं पर कुछ स्थानीय चरों तक पहुंचने की आवश्यकता होती है। एक उदाहरण होगा:
class SomeRouteClass
def initialize(sinatra, calculator)
@calculator = calculator
@sinatra = sinatra
end
def setup_routes
@sinatra.get "/add" do
return @calculator.add(1,1)
end
end
end
class Calculator
def add(a,b)
return a+b;
end
end
sinatra = Sinatra.new
calculator = Calculator.new
routing_class = SomeRouteClass.new(sinatra, calculator)
routing_class.setup_routes
sinatra.run!
किसी भी वर्तनी/वाक्य रचना गलतियों यह सिर्फ एक त्वरित उदाहरण है माफ कर दो, लेकिन जैसा कि आप देख सकते हैं एक वर्ग मार्गों पंजीकृत करता है और जब उस मार्ग मारा जाता है कुछ कैलकुलेटर का एक उदाहरण के द्वारा उत्पन्न मान देता है इसे तुरंत शुरू किया गया था।
समस्या मेरे पास है कि इस उदाहरण में जब मैं कोशिश करता/चलाता हूं तो यह मुझे बताता है कि @ कैलकुलेटर एक नील क्लास है, और मेरा मानना है कि सिनात्रा सिर्फ कोड के ब्लॉक को लेता है संदर्भ। यह किसी भी साधारण टेम्पलेट प्रतिपादन के लिए ठीक लगता है, लेकिन यदि आपको कुछ और फैंसी करने की ज़रूरत है, या स्टेटिक्स और सिंगलेट्स का उपयोग न करके अपने कोड मॉड्यूलर को रखना चाहते हैं तो आपको इसके आसपास कोई रास्ता नहीं लगता है ...
मेरी धारणाएं यहाँ सही हैं? और अगर ऐसा है तो संदर्भ रखने का कोई तरीका है क्योंकि ऐसा लगता है कि मुझे कोड को बनाए रखने के लिए बुरी और कड़ी मेहनत करने के लिए मजबूर करना पड़ रहा है अगर मुझे मार्ग से बातचीत करने के लिए सब कुछ स्टैटिक्स और सिंगलेट्स लिखना है।
== संपादित करें ==
सवाल और सामग्री का पुनर्गठन और अधिक सही वास्तविक समस्या को प्रतिबिंबित करने के, अब मैं पुस्तकालय का एक मजबूत समझ है है।
, ऐसा लगता है कि यह सिर्फ कॉपी और पेस्ट करता deine_method का उपयोग कर एक नई विधि में मार्ग के साथ उपयोग की जाने वाली विधि। तो वहाँ है कि विधि के बाहर कोई संदर्भ ... जिसका मतलब है कि कि चारों ओर एक ही रास्ता सब कुछ स्थिर, बस गलत लगता है जो ... के रूप में अपनी कठिन बदल सकते हैं और इस तरह से परीक्षण करने के लिए बनाने के लिए किया जाएगा है ... मैं पूरी तरह से हो सकता है इसके बारे में गलत क्या है क्योंकि रूबी अभी भी मेरे लिए एक नई भाषा है। – Grofit
स्थिरांक वस्तु पैटर्न का उपयोग करने के लिए इस के आसपास पाने के लिए कोशिश कर रहा है, लेकिन यह अभी भी बातें वास्तव में बुरा कर रहा है सब कुछ के रूप में इस काम करने के लिए स्थिर हो गया है ... वहाँ एक कारण है कि वे एक नई विधि में विधि शरीर नकल है तो यह सभी संदर्भ खो देता है? के रूप में मैं कोई लाभ यह करने के लिए नहीं देख सकते हैं, बस कमियां ... हालांकि फिर से मैं इस के लिए नया हूँ तो पूरी तरह से कुछ उलझन जो इस आवश्यकता को नहीं समझ सकते। केवल एक चीज जिसे मैं सोच सकता हूं वह यह है कि विधि निकाय वस्तु को साफ़ किया जा सकता है या विधि को अपडेट किया जा सकता है या इसे कहने से पहले उदाहरण से हटाया जा सकता है, हालांकि ऐसा लगता है कि – Grofit