Ruby で 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
編集:私の質問は少し軌道から外れました。現在のコード設定では、stack level too deep
8行目でエラーが発生します。ただし、Ed S.のソリューションを採用すると
@left = @right = nil
次に、<<
メソッドは次のように不平を言います:undefined method '<<' for nil:NilClass (NoMethodError)
22行目。
誰でもこれを解決する方法を提案できますか? BinaryTree
私の考えは、変数left
とright
が のインスタンスであるBinaryTree
(つまり、それらの型が である) ことを何らかの方法でクラスに伝えることができれば、BinaryTree
すべてうまくいくということです。私が間違っている?