Forum: Ders Arası RSS
Kurucu İşlevi Döngü veya Etiket İçinden Çağırmak
Kadir Can #1
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Kurucu İşlevi Döngü veya Etiket İçinden Çağırmak
Merhaba arkadaşlar;
Turna için kod yazmaya devam ediyorum ve bazı şekil belirleyici html etiketlerini oluşturmaya başladım. abbr ve acronym etiketleri bir de title istedikleri için onları ayrı bir sınıfa aldım ve kullanıcının istediği tipe göre seçilmelerini final switch() ile sağlamaya çalıştım; ancak super()'ı final switch() içinden çağırmaya izin vermiyor. Verdiği hatayı aşağıda yazdım. Bana mantık olarak yanlış gibi geldi, sonuçta iki farklı duruma göre iki farklı nesneye sahip olmak isteyebiliriz, değil mi?
Aklıma şöyle bir çözüm geldi, package sarma derecesine sahip bir setTag() işlevi ekleyebiliriz, ama bu biraz riskli olabilir gibi geldi; çünkü her Xml elemanının bir etiketi olmalı, sonraya bırakılmamalı diye düşünüyorum. Siz ne dersiniz?
/* Enumeration for type of abbreviations */
enum abbreviationType{abbreviation, acronym};
 
/* 
 * Class for abbreviations
 * title is the full text of abrreviation(or acronym)
 * eg: <abbr title="World Health Organization">WHO</abbr>
 * In this example, "World Health Organization" is the tittle.
*/
class Abbreviation : XmlElement
{
    this(abbreviationType type, string title, string abbreviation)
    in
    {
        assert(abbreviation.length > 0);
    }
    body
    {
        final switch(type){
            case abbreviationType.abbreviation : super("abbr"); break;
            case abbreviationType.acronym : super("acronym"); break;
        }
        setAttributes(["title" : title]);
        setContent(abbreviation);
    }
}
schemehelper.d(68): Error: constructor calls not allowed in loops or after label
s
schemehelper.d(69): Error: constructor calls not allowed in loops or after label
s
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Haklısın. final switch olduğuna göre mutlaka birisi işletilecek demektir. Başka çözümler de bulunabilir ve senin de aklındadır ama şöyle bir değişiklik olabilir:

        string etiket;
 
        final switch(type){
            case abbreviationType.abbreviation : etiket = "abbr"; break;
            case abbreviationType.acronym : etiket = "acronym"; break;
        }
 
        super(etiket);

Yine de gerçekten farklı türler de ekleyebilirsin bunlar Abbreviation'dan türeyebilirler ve gereken etiketi Abbreviation'a verebilirler (tabii o zaman belki de Abbreviation'a daha başka bir isim düşünmek gerekebilir):

class Abbreviation_Başkaİsim{}
 
class Abbreviation : Abbreviation_Başkaİsim {
    this() { super("abbr"); }
}
 
class Acronym : Abbreviation_Başkaİsim {
    this() { super("acronym"); }
}

Ali
Bu mesaj acehreli tarafından değiştirildi; zaman: 2012-07-17, 12:45.
Kadir Can #3
Üye Haz 2010 tarihinden beri · 413 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler, birnci çözüm aklıma gelmişti, onu uyguladım.
Şu an birim testleri geçiyor.
Bu arada bahsetiiğimiz modülün adını schemehelper olarak düşünmüştüm; ama sanırım çok uygun olmadı. Başka fikirler var mı?
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 19:56:04 (UTC -08:00)