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. ]