Alıntı (zafer):
> Hedef parametresi şablon metodu içinde hiç kullanılmamış, yinede böyle bir tanım yapmak gerekir mi?
Gerekir. Öyle olmasa, to!JSONValue(42) yazıldığında T'nin JSONValue olduğunu belirtiyoruz gibi olur ama öte yandan T parametre listesinde geçtiği için ve bu durunda 42'nin türü olan 'int' olarak da çıkarsandığı için JSONValue ve int birbirlerini tutmazlar.
Belki de o 'to' özellemesi içindeki JSONValue'lar yerine de Hedef yazmalıydık. (?)
Alıntı:
>
> static if (isSomeString!T)
> ...
> else static if (is (T : long))
> ...
> ```
>
> static if ile daha önce karşılaşmıştım ama hala tam olarak kavrayamadım. Neden if-else yerine static if kullandık?
if çalışma zamanında işletilir. Şablonlar ise bütünüyle derleme zamanı olanaklarıdırlar. Bunun nedeni D'nin 'static typing'e sahip bir dil olmasıdır. Derlenen her koddaki herşeyin türü derleme zamanında bellidir. Onun için türlerle ilgili sorgulamaları derleme zamanında işleyen 'static if' ile yapmak gerekiyor.
Alıntı:
> is! şablonunu çok aramama rağmen ne yerini nede tanımını bulamadım, kodlardan anladığım kadarı ile kendisine geçilen ifadeyi kontrol edip true veya false değeri döndürüyor.
Şurada "is ifadesi" başlığı altında ve zamanında tamamen anlamadan yazdığım bir şeyler var:
http://ddili.org/ders/d/kosullu_derleme.html
(Aslında 'static if' de orada.)
Ama 'is' ifadesinin isSomeString'e tam uyan kullanımını şurada "İsimli kısıtlama yöntemi" başlığı altında anlatıyorum:
http://ddili.org/ders/d/sablonlar_ayrintili.html
isSomeString de aynı oradaki uçabilir_mi şablonu gibi gerçekleştirilmiştir.
Alıntı:
> Unqual! geldi. is! şablonu ile kullanmak iyi olmaz mıydı?
Anlıyorum. Şu işlemez diyorsun:
immutable j = to!(immutable JSONValue)(students); // derleme hatası
Hedef gibi parametreden çıkarsanmayan türler için bunun en iyi yolunun ne olduğunu bilmiyorum. Örneğin şu da ek olarak tanımlanabilir:
JSONValue to(Target : immutable JSONValue, T)(T value)
Ama kullanıcılar yukarıdaki satırdaki derleme hatasını şöyle de aşabilirler:
immutable j = cast(immutable JSONValue)to!(JSONValue)(students);
Ben bu konuyu (sorunu) İngilizce forumlarda dile getirmiştim. Keşke işlevlerin dönüş türlerinde 'unique' gibi bir anahtar sözcük belirtilebilse, o zaman işlev "bu döndürdüğüm nesneden elimde başka hiç bulundurmuyorum; gerektiğinde immutable olarak da kullanabilirsiniz" demiş olabilir.
O olsaydı o zaman to'nun JSONValue özellemesi immutable bir değişkeni ilklemek için de kullanılabilirdi. Ama öyle bir anahtar sözcük yok. :) Zaten belki başka sıkıntılar da getiriyordur; derinine incelediğimi söyleyemem.
Alıntı:
>
>
> else static if (__traits(compiles, cast(JSONValue)değer))
> Mümkünse bu satırında daha detaylı bir anlatımını rica ediyorum. Bu arada ben mi yanlış yerlere bakıyorum anlamadım ama ben yine __traits metodunu bulamadım, nerede acaba?
Genel bir bilgi olarak Google aramalarında "site:ddili.org" eklenebiliyor. Yani şu arama "Tür Nitelikleri" bölümünü buluyor:
'__traits site:ddili.org'
http://ddili.org/ders/d/tur_nitelikleri.html
Digital Mars'ta da şurada:
http://dlang.org/traits.html#TraitsKeyword
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]