December 17, 2022
On 12/17/22 00:00, Salih Dincer wrote:

>      this(char s, uint n) {
>        sınıfı(s);
>        numarası(n);
>      }

[...]

>    alias opCall = opAssign; /* hack: `opAssign` methods
>                        are not used for initialization,
>                        but for subsequent assignments

O yüzden 'sınıfı = s' yazılamadığını bilmiyordum. Anlıyor gibiyim ama garip.

>    @property opOpAssign(string op: "+")(T x) {

O @property'lerin bir etkisi var mı?

Ali

December 18, 2022

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...

1 2
Next ›   Last »