October 10, 2013

Merhaba,

Biraz aptalca olacak ama, unutmuş olabileceğim bilgilerin tekrarını yaparak şunu anlayamadığımı fark ettim:

import std.stdio;

struct S{
 int i;
 S s();
}

void main(){
 S test;
 test.writeln; // S(0)
 test.i = 1;
 /* DERLENEMEYEN test.s = new S(2); SATIR */
 test.writeln; // S(1)
}

Sanırım S'in içindeki s(), aslında S döndüren bir işlev öyle mi? Peki o satırın başına static koyduğumuzda (ve tabi parantezleri kaldırdığımızda) ne oluyor? Yani şöyle:

import std.stdio;

struct S{
 int i;

 struct foo {
   int i;
 }

 static S f;
}

void main(){
 S test;
 test.writeln; // S(0)
 test.i = 1;
 test.f.i = 2;
 test.writeln; // S(1)
}

Teşekkürler...

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

October 10, 2013

Alıntı (Salih Dinçer):

>

Sanırım S'in içindeki s(), aslında S döndüren bir işlev öyle mi?

Evet. İşleve değer atayamadığımız için de derlenemiyor.

Alıntı:

>

Peki o satırın başına static koyduğumuzda

Oradaki static'in anlamı o türün bütün işlevleri tarafından paylaşılan anlamına geliyor.

Alıntı:

>
>   static S f;
> ```


Bu türün sıfır veya daha fazla sayıdaki nesnelerine ek olarak tek adet S.f adında bir S nesnesi daha var.

Ali

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