Forum: Ders Arası RSS
Eşleme tablosu'nun .values niteliği const üye üretebiliyor
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4511 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Eşleme tablosu'nun .values niteliği const üye üretebiliyor
Dün D ile ilgili bir sorunla karşılaştım. const üye işlev içinde this'in ve dolayısıyla üyelerin const olduklarını biliyoruz:
struct S {
    int i;
    int[char[]] aa;
 
    void foo() const {
        static assert(is(typeof(this) == const(S)));
        static assert(is(typeof(i) == const(int)));
        static assert(is(typeof(aa) == const(int[char[]])));
    }
}
 
void main() {
}
Buraya kadar güzel... Sorun, const eşleme tablosu üyenin .values niteliğini çağırınca ortaya çıkıyor: Her ne kadar aa'nın üyelerinin kopyaları olsalar ve bu yüzden aa'ya hiçbir etkileri olamasa da, .values'un döndürdüğü dizinin elemanları const(int) oluyor:
        static assert(is(typeof(aa.values[0]) == const(int)));
Bu gereğinden fazla bir kısıtlama çünkü örneğin döndürülen diziyi sıralayamıyoruz:
        auto değerler = aa.values;
        değerler.sort;    // <-- DERLEME HATASI (Error: can only sort a mutable array) 
.byValue da işe yaramıyor. İki çözüm var:

1) cast ile tür dönüşümü:
        auto değerler = cast(int[])aa.values;
2) Döngü kullanmak:
        int[] değerler;
        foreach (değer; aa.byValue) {
            değerler ~= değer;
        }
Ali
Avatar
zekeriyadurmus #2
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Dilde bu ve bunun gibi hatalar ne zaman bitecek. Tam anlamıyla kararlı bir sürüm çıkması iyi olur.

Dlang tour u dmd v2.071.0 ile derleyebilirken. dmd v2.072.0 ile derlenemediğini gördüm. Fakat LLVM v2.072.0 sıkıntı çıkartmıyor. 3 sene önce d ile program yazarken de aynı sıkıntı var şimdi de öyle. Her yeni sürüm bir önceki sürüme göre yazılan kodun çalışmamasına sebep oluyor :/ Halen daha düzeltilmesi gereken çok fazla bug var.

Zekeriya
Bilgi meraktan gelir...
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-10-18, 20:44:33 (UTC -07:00)