September 02, 2022

Merhaba,

Yeni bir şey öğrendim: Bu bir derleme zamanı olanağı, tıpkı enum karesiniAl = (int a) => a * a; gibi. İşin içine AA'yi dahil ediyoruz:

alias oT = int;
enum opMap =
[ "×": (oT a, oT b) => a * b,
  "÷": (oT a, oT b) => a / b,
  //...
];

auto ikiyeKatlaVeBöl(int first, int second) {
  const katla = opMap["×"](first, 2);
  return opMap["÷"](katla, second);
}

void main()
{
  assert(6.ikiyeKatlaVeBöl(3) == 4);
}

Kod yazarken, kendi sözdiziminizi tasarlayabilirsiniz. Henüz başka ne işi yarar bilmiyorum.

Kolay gelsin...

January 30, 2023

On Friday, 2 September 2022 at 13:11:03 UTC, Salih Dincer wrote:

>

Yeni bir şey öğrendim: Bu bir derleme zamanı olanağı...

Meğer çalışma zamanı da oluyormuş! Bir yapı kurulduktan sonra temsilci ve AA ile şöyle dört işlem tanımlanabiliyor:

struct S {
  float a, b;

  alias opBin = float delegate();
  opBin[string] ops;
}

void main() {
    S s = { a : 3.1415, b : 0.4142 };
  s.ops = [ "*" : () => s.a * s.b,
            "+" : () => s.a + s.b,
            "/" : () => s.a / s.b,
            "-" : () => s.a - s.b ];
  import std.stdio;
  s.ops["*"]().writeln; // 1.30121
  s.ops["+"]().writeln; // 3.5557
  s.ops["/"]().writeln; // 7.5845
  s.ops["-"]().writeln; // 2.7273
}

Tabii ki olacak AA'lar bir çalışma zamanı olanağı :)

Başarılar...