Forum: D Programlama Dili RSS
D Haftanın Sorusu
Sayfa:  önceki  1  2 
acehreli (Moderatör) #16
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ı
Yanıtlanan mesaj ID 109
Yani makaledeki gibi alias this'i fonksiyonla kullanamadım. Bu çalışmıyor:

import std.stdio;
 
class BüyükSayı
{
    int sayı_döndüren_fonksiyon()
    {
        return 42;
    }
 
    alias sayı_döndüren_fonksiyon this;
}
 
void foo(int sayı)
{
    writeln(sayı);
}
void main()
{
    foo(new BüyükSayı);
}

Ali
acehreli (Moderatör) #17
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ı
Galiba çözdüm: BüyükSayı'nın int'e dönüşümü otomatik değilmiş. Hata mesajı şuydu:

Error: cannot implicitly convert expression (new BüyükSayı) of type deneme.BüyükSayı to int

Tür dönüşümünü cast(int) ile açıkça isteyince çalışıyor:

import std.stdio;
 
class BüyükSayı
{
    int sayı_döndüren_fonksiyon()
    {
        return 42;
    }
 
    alias sayı_döndüren_fonksiyon this;
}
 
void foo(int sayı)
{
    writeln(sayı);
}
void main()
{
    foo(cast(int)new BüyükSayı);
}

İstediğim sonucu veriyor ama güvenli olup olmadığını bilmiyorum.

Ali
Avatar
mert #18
Üye Ara 2010 tarihinden beri · 194 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 99
Konu adı: Emekliye ayrılan repeat işlevi notlaması
    interface: arayüz
    repeat: tekrarlayarak string oluşturan bir fonksiyon
    foreach ve 0..n gibi bir aralık
    appender: "sonuna ekleyen" bir tür
    foreach ve dizi

import std.stdio;
import std.string;
import std.array;
 
interface Şekil
{
    void çiz();
}
 
class YatayÇizgi : Şekil
{
    int genişlik_;
 
    this (int n)
    {
        genişlik_ = n;
    }
 
    void çiz()
    {
        writeln(repeat("-", genişlik_));
    }
}
 
class DikeyÇizgi : Şekil
{
    int yükseklik_;
 
    this (int n)
    {
        yükseklik_ = n;
    }
 
    void çiz()
    {
        foreach(i; 0..yükseklik_) {
            writeln('|');
        }
    }
}
 
class Çerçeve : Şekil
{
    Şekil[] şekiller_;
 
    this (int genişlik, int yükseklik)
    {
        şekiller_ = new Şekil[0];
 
        auto sonuna_ekleyici = appender(&şekiller_);
        sonuna_ekleyici.put(new YatayÇizgi(genişlik));
        sonuna_ekleyici.put(new DikeyÇizgi(yükseklik));
        sonuna_ekleyici.put(new YatayÇizgi(genişlik));
    }
 
    void çiz()
    {
        foreach(şekil; şekiller_) {
            şekil.çiz();
        }
    }
}
 
void main ()
{
    Çerçeve çerçeve = new Çerçeve(12,5);
    çerçeve.çiz();
}

Not:  2012 mart ayında std.string modülünde yer alan repeat() işlevi emekliye ayrılmış. onun yerine std.array modülünde bulunan replicate() işlevini kullanmamız gerekiyor. Kodları deneyecek olan arkadaşlarımın  YatayÇizgi sınıfını aşağıdaki gibi düzenlemeleri gerekmektedir.
class YatayÇizgi : Şekil
{
    int genişlik_;
 
    this (int n)
    {
        genişlik_ = n;
    }
 
    void çiz()
    {
        writeln(replicate("-", genişlik_));
    }
}
mert
Bu mesaj mert tarafından değiştirildi; zaman: 2012-09-24, 17:45.
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:
Sayfa:  önceki  1  2 
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-19, 04:18:46 (UTC -08:00)