मैं रूबी में BinaryTree वर्ग को लागू करने की कोशिश कर रहा हूँ, लेकिन मैं stack level too deep
त्रुटि मिल रही है, करते हैं, हालांकि मैं कोड के उस विशेष टुकड़ा में किसी भी प्रत्यावर्तन ज़रिये जुड़े हुए हैं नहीं में:कार्यान्वयन बाइनरी ट्री रूबी
1. class BinaryTree
2. include Enumerable
3.
4. attr_accessor :value
5.
6. def initialize(value = nil)
7. @value = value
8. @left = BinaryTree.new # stack level too deep here
9. @right = BinaryTree.new # and here
10. end
11.
12. def empty?
13. (self.value == nil) ? true : false
14. end
15.
16. def <<(value)
17. return self.value = value if self.empty?
18.
19. test = self.value <=> value
20. case test
21. when -1, 0
22. self.right << value
23. when 1
24. self.left << value
25. end
26. end # <<
27.
28. end
संपादित करें: मेरा प्रश्न थोड़ा सा ट्रैक चला गया है। वर्तमान कोड सेटिंग मुझे लाइन 8. पर stack level too deep
त्रुटि देता है हालांकि, अगर मैं एड एस के समाधान को रोजगार
@left = @right = nil
तो <<
विधि कह शिकायत: undefined method '<<' for nil:NilClass (NoMethodError)
लाइन पर 22
किसी को भी सुझाव है कि कर सकते हैं इसे कैसे हल करें? मेरा विचार यह है कि अगर मैं किसी भी तरह BinaryTree
कक्षा को बता सकता हूं कि left
और right
चर BinaryTree
(यानी उनका प्रकार BinaryTree
) के उदाहरण हैं, तो यह सब ठीक रहेगा। क्या मै गलत हु?
हर बार जब आप BinaryTree.new कहते हैं, यह 'initialize' विधि हिट और एक अन्य BinaryTree.new कहता है, और हमेशा के लिए दोहराता है। यही कारण है कि आपका स्टैक बह रहा है – Edmund