Thread overview
UFCS'de Temsilci Alamama
Oct 22, 2012
Salih Dinçer
Oct 23, 2012
Salih Dinçer
October 22, 2012

Merhaba,

UFCS kullanımına kendimi o kadar kaptırmışım ki her şeyi UFCS gerekliliğinde kullanmak istiyorum. Bazı zaman mantıklı açıklaması (örn. writef'de) oluyor ama şu aşağıdakine mantıklı bir açıklama getiremedim. Ne demek foo, bar tanımsız...:)

**Derleme Hatası: **
'delegate.d(15): Error: undefined identifier 'bar'
delegate.d(21): Error: undefined identifier 'foo''

   import std.stdio;

   alias real delegate(real) TEMSİLCİ;

void main()
{
   auto aralık = [ 1.5, 7.5 ];
   TEMSİLCİ hesap = a => a*a;

   auto foo(TEMSİLCİ bar)
   {
       real[] sonuç;
           foreach(n; aralık[0]..aralık[1])
           {
               //sonuç ~= bar(n);/*
               sonuç ~= n.bar();//* (v2) */
           }
           return sonuç;
   }

   //foo(hesap).writeln();/*
   hesap.foo().writeln();//* (v2) */
}

Çıktısı:
'[2.25, 6.25, 12.25, 20.25, 30.25, 42.25]
'
Dip Not: Çalışan sürümünü açmak ve v2'yi kapamak için '//' işaretlerini kaldırmanız yeterli...

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

October 23, 2012

Yanıt ve küçük kod örneği için teşekkürler...

Ancak benim örneğimde temsilci, kanlı ve canlı olan bir işleve parametre olarak gönderiliyor. Hata ise temsilci ile ilgili olduğunu düşünsek de içişlev hakkında. Tamam, döngü içindeki temsilciye parametre gönderiyor. Ama hatayı ilk olarak son satırda keşfetmiştim ve diğerinden farklı olsa gerek. Oysa hata aynı...:)

Sevgiler, saygılar...

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

October 22, 2012

Aynı hatayı gösteren daha küçük bir kod:

void main()
{
   int delegate(int) hesap = a => a;

   1.hesap();
}

Her ne kadar kısıtlama gibi görünse de UFCS'in tanımına uygun davranıyor: Eğer öyle bir üye işlev yoksa bir de aynı isimdeki normal işlev (free function) denenir:

http://www.drdobbs.com/cpp/uniform-function-call-syntax/232700394

'hesap' normal bir işlev olmadığı için UFCS konusuna dahil değil. Bunun geçerli bir nedeni mi var yoksa yalnızca gözden mi kaçmış, bilmiyorum.

Ali

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

October 23, 2012

Temsilciler ve iç işlevler için perde arkasında bir de ortam göstergesi kullanılıyor. Belki onunla ilgili bir konudur. Hayal meyal hatırlıyor gibiyim: Walter bir olanağın gerçekleştirilmesinin bunlar için olanaksız olduğunu anlatıyordu ama UFCS miydi, hatırlamıyorum.

Ali

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