Forum: Ders Arası RSS
UFCS'de Temsilci Alamama
Avatar
Salih Dinçer #1
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: UFCS'de Temsilci Alamama
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...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj Salih Dinçer tarafından değiştirildi; zaman: 2012-10-22, 23:53.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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/23…

'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
Avatar
Salih Dinçer #3
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj Salih Dinçer tarafından değiştirildi; zaman: 2012-10-23, 04:43.
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-20, 01:32:19 (UTC -08:00)