Hadi içimde kalmasın, sondan birinci örneği paylaşayım ve çözümü önereyim:
import std.stdio;
int main() {
char[] deneme = cast(char[])"D Dili";//*/
int[] tekler = [ 1, 3, 5, 7, 9, 11 ];
deneme.writeln; // D dili
tekler.writeln; // [1, 3, 5, 7, 9, 11]
writeln(); //*/
char[] birDilim;
birDilim = deneme[2 .. $ - 1];
birDilim.writeln; // Dil
//birebirAktar!char(birDilim, cast(char[])"Pir");
deneme.writeln; //* D Piri <-- yazmıyor, çünkü üst satır çalışmıyor...:) */
writeln(); //*/
int[] intDilim; // başka bir dilim...:)
intDilim = tekler[2 .. $ - 1];
intDilim.writeln;
birebirAktar!int(intDilim, [4, 5, 6]);
tekler.writeln; //* [1, 3, 4, 5, 6, 11] int'de çalışıyor! */
}
void birebirAktar(T)(ref T[] hedef, T[] aktar) {
size_t SINIR = hedef.length <= aktar.length ?
hedef.length-1 : // hedef büyükse =>
aktar.length-1;
while(SINIR+1) {
hedef[SINIR] = aktar[SINIR];
SINIR--;
}
}
Sorun, sanırım tür dönüşümü olarak olarak kullandığımız cast()'de. Çünkü böyle bir şey yapmadığımızda örnek bir güzel çalışıyor. Bunu görmek için deneme dizisinin eşitliğinden sonra şu satırı/değerleri yapıştırın:
[ 'D', ' ', 'D', 'i', 'l', 'i' ];/*** gizli olan satırı açmayı unutmayın ***
Bu durumda çıktısı şu şekilde olmalı:
Alıntı:
> 'D Dili
[1, 3, 5, 7, 9, 11]
Dil
D Piri
[5, 7, 9]
[1, 3, 4, 5, 6, 11]
'
Kafayı yemek üzereydim ve Ali hocanın derslerine sarıldım. Kendi kendime dedim, herhalde dilim olayını henüz tam öğrenememiş olmalıyım ki bir şeyi ihmal ediyorum. Dikkat ederseniz örnekte tekler diye bir dizi var ve bunu oradan aldım. Örneğin ikinci bölümünde tek sayılar kümesi tam istediğim gibi bozuluyor ama "D Dili" bir türlü "D Piri" olmuyor...:)
İlginçtir, birebirAktar() ismindeki işlevin ikinci parametresine yine cast() ile veri aktarmaktayım. Yani cast() doğru çalışıyor ama bu veri sanki immutable olan string'den nem kapmış olacak ki değiştirilemiyor. Eee, atalarımız ne demiş? Huylu huyundan vazgeçmez imiş...:)
Dip Not: std.conv.to!... şablonunu denemedim. Belki o daha doğru çalışıyor olabilir...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]