May 26, 2011

(Bunları Erdem'in gerçek son yazdığını görmeden yazmışım. :))

Erdem'in son sorusuna yanıt vermeyi unutmuşum. :(

Alıntı (erdem:1304360680):

>

Sizin yazdığınız kod da tam ayrıntılı incelemedim ama hemen hemen aynı gibi. Tek fark burada sağdaki geçerli bir nesneyi göstermiyorsa (null'sa) ya da dinamik türü Saat değilse false döndürüyor. Ama ortada 'null' bir referans göremiyorum :)

Aslında ÇalarSaat.opEquals içindeyken sağdaki null oluyor. Çünkü sağ tarafta Saat kullanıyoruz. ÇalarSaat.opEquals onu ÇalarSaat'e dönüştürmeye çalışıyor. O dönüşüm null üretiyor, çünkü Saat bir ÇalarSaat değildir. (Tersi doğrudur.)

Ama buradaki hata o null yüzünden oluşmuyor, program yığıtı tükendiği için oluşuyor.

Alıntı:

>

Baktıktan sonra sorun sadece 'ÇalarSaat''in 'opEquals' işlevinde

> super.opEquals(o)
> ```
yerine
>

(super == o)

kullanılmasından kaynaklanıyor. Aslında bunlar eşit değil miydi :)

>

'super == o' yazınca yukarıda da konuştuğumuz src/druntime/src/object_.d içindeki algoritma tekrar işletiliyor. Sonsuza kadar (yığıt tükenene kadar) takılıyoruz. Bunu görmek için ÇalarSaat.opEquals içinde writeln ile bir satır yazdırmak yetiyor. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2
Next ›   Last »