On Saturday, 17 December 2022 at 23:56:08 UTC, Ali Çehreli wrote:
>O @property'lerin bir etkisi var mı?
Var hocam çünkü std.format
bunu bir işlev sonucu gibi algılamıyor, yapının ismiyle birlikte ekrana yazıyor!
Şimdi basit ve tanıdık gelen sarmalama örneği ile devam edelim mi! Bunu 3 adımla işleyip bir sonuca varmak istiyorum:
import std.stdio;
void main()
{
struct S
{
int i;
alias opCall this;
//@property
auto opCall() //inout
{
return i;
}
//@property
auto opCall(int i)
{
return this.i = i;
}
}
S s;
s = 1;
s.writeln(s(2));
}
1. adımda @property
'ler yok bunu yukarıda görüyorsunuz ve eğer denerseniz S(1)2
çıktısını alacak.
2. adımda lütfen bütün yorumları yok edin, evet inout
da lazım. Eski sürümlerde istemiyor ama lazım.
3. adımda Şimdi inout
'u gizleyin ve std.format
'dan dolayı programın göçmesine şahit olun.
Normalde 12
çıktısını almamız gerekiyor çünkü önce opCall()
normal bir işlev gibi çalışıp (evet, onun ismini getSet()
de yapabilirdik) kurma(set) yapabiliyoruz. Sonra parametre almadığı için inout
olan diğeri devreye giriyor ve @property
sayesinde ekrana istediğimiz gibi yazıyor.
Herhangi bir opCast()
yazmaya da ihtiyaç bırakmıyor. Ama dilerseniz kullanılabilir çünkü denedim çalışıyor.
Hocam eğer bu şekil kullanımın bir mahsuru yoksa ben kütüphanemdeki uygun olan tüm sarmaları bu şekilde değiştiriyorum?
Sevgiler, saygılar...