Ben Ruby BinaryTree sınıfını uygulamak çalışıyorum ama kodun o parça herhangi özyineleme kullanıyor görünüyor olmadığı halde ben, stack level too deep
hatası alıyorum içinde:Uygulama İkili Ağacı Ruby
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
Düzenleme: Sorum şu ki biraz yoldan gitti. undefined method '<<' for nil:NilClass (NoMethodError)
çizgisinde 22.
kimse önermek Could: geçerli kod ayarı Ed S. adlı çözümünü istihdam eğer
@left = @right = nil
sonra <<
yöntem söyleyerek şikayet, Ancak bana hattı 8. en stack level too deep
hata veriyor Bunu nasıl çözebilirim? Benim düşüncem, BinaryTree
sınıfına left
ve right
değişkenlerinin BinaryTree
(örn. Türleri BinaryTree
) örneklerinden olduğunu söyleseydim, her şey iyi olurdu. Yanlış mıyım?
Eğer BinaryTree.new arasam, bu 'initialize' yöntemi vurur ve başka BinaryTree.new çağırır ve sonsuza kadar tekrar eder. Bu yüzden yığının – Edmund