Başka bir yöntem de işlev yükleme. (Bunda da eleman türü şablon parametresi olabilir.) Aynı isimdeki işlevlerden birisi tek değer alır, diğerini 'foo([değer]);' diye çağırır:
import std.stdio;
void foo(int[] dizi) {
writefln("%(%s, %)", dizi);
}
void foo(int i) {
foo([i]);
}
void main() {
foo(42);
}
Tabii diğerini çağırmak yerine tek elemanı doğrudan da kullanabilir (senin örneğinde şanslıyız çünkü ~= işleci her iki türü de destekliyor) çünkü o geçici dizinin oluşturulmasının da masrafı olacaktır. Denemeden bilinmez. Bu gibi şeyleri denemenin en kolay yolu assembly'sine bakmaktır.
Şurada bakmak kolay (ASM'ye tıklayın):
https://run.dlang.io/is/nHMGh0
'_d_arrayliteralTX@PLT32' çağrısının ne kadar masraflı olduğunu bilmiyorum ama tabii biraz masraf ekliyor:
'
void onlineapp.foo(int):
push RBP
mov RBP,RSP
sub RSP,010h
mov -8[RBP],RDI
mov ESI,1
mov RDI,TypeInfo_Ai.__init@GOTPCREL[RIP]
call _d_arrayliteralTX@PLT32
mov RDI,-8[RBP]
mov [RAX],EDI
mov RDX,RAX
mov EDI,1
mov RSI,RDX
call void onlineapp.foo(int[])@PLT32
mov RSP,RBP
pop RBP
ret
'
Not: Böyle masrafların hemen hemen hiçbir zaman önemi yoktur. Bilgilenmek için bakıyorum.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]