D語言的函式程式設計

2021-08-29 06:07:46 字數 927 閱讀 8779

前陣子論壇上有人問我d語言做函式程式設計怎樣,老實說我沒怎麼想過這問題。現在想來,d語言可以有函式指標、委託、仿函式(opcall),所以它和c++基本上沒什麼不一樣。

[code]

r map(r, t)(r delegate(t) dg, t arr)

t filter(t)(bool delegate(t) dg, t arr)

[/code]

reduce實現稍麻煩點,因為涉及到型別,比如python可以這樣用:

[code]

reduce(lambda x,y: x + y, [1,2,3,4,5])

[/code]

這時因為x+y和x的型別相同,用d實現這個版本也不麻煩,但python還可以使用不同型別:

[code]

reduce(lambda x,y: str(x) + str(y), [1,2,3,4,5])

[/code]

這種用d來實現就不大容易了,因為返回值型別也可能不確定。

使用:[code]

void main(), arr);

writefln(arr1);

char arr2 = map(delegate char (int i), arr);

writefln(arr2);

}[/code]

看起來真醜。。為什麼不能直接呼叫map(&std.string.tostring, arr)呢?因為std.string.tostring是個過載函式,在這裡它不能決議。

我想的另乙個辦法是使用仿函式:

[code]

class tostring

}map(new tostring, [1,2,3,4,5]);

[/code]

不過,如何來寫這個map呢?它的返回值型別如何出現在宣告中呢?感覺很勉強啊。或許直接使用委託就是最好的選擇。

D語言GUI程式設計 messagebox

為了能理解d語言,試著從最簡單的gui程式開始。c 如下 include include int winapi winmain hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,int ncmdshow 從dmd的sample中找...

配置D語言程式設計環境

d語言是由walter bright開發的,他也是symantec c 編譯器的作者,僅憑這一點就知道d語言一定不錯。d語言的介紹最好是看 uframer的blog,他翻譯了d語言的大部分文件。當然由於d語言目前一直處於測試版,文件和最新的編譯器之間可能有很多不一致。d語言的編譯器目前有2個,dmd...

14用d程式設計函式引數

引數,始終複製引數,除非加了ref c 的 即使是引用型別 切片,關聯陣列,類 也是複製的,當然,複製的是鑰匙.實體未複製.因此,通過它是可以直接修改原實體的.因為鑰匙的能力是很強的.當然通過值傳遞,因為複製的都是鑰匙.但切片,不僅僅是鑰匙,一但增加超過容量.鑰匙變實體,這個時候,原來的實體就不會變...