新特性:
1、給委託增加ptr屬性,指向委託所繫結的物件。
這是乙個語法糖,dg.ptr被轉化為cast(void*)dg,它只能作右值,所以除了能讀取它以外,在語法上禁止對它賦值。要想把委託繫結到不同的物件,你只能自己實現:
class
foovoid
bar()
}void
main()
void
**ptr
=cast(
void**)
&dg;
foreach
(foo foo; foos)}
這種方式也不是我們所希望的,一般來說委託繫結到多個物件時,因為是取到某成員函式指標,再進行繫結。比如模擬乙個activesupport所擴充套件的乙個ruby.array#map用法:
import std.stdio;
class
foovoid
bar()
}class
array(t)
void
map(
void
function() func)}}
void
main()
是的,delegate內部儲存了2個指標,所以我們可以容易地hack它。
[注:上面的main函式中陣列直接量賦給棧物件也是這個版本中新增的內容,顯然只能用於static物件是很雞肋的。這裡簡單帶過不提。]
[注:上面這個map的模擬並不是activesupport的map擴充套件的全部用途,那個map還是收集返回值,這裡只演示呼叫語法。activesupport中擴充套件的map呼叫語法是map(&:to_s),就可以收集到陣列中所有元素呼叫to_s後的返回值。]
2、給內嵌內的例項增加outer屬性,指向外層物件。
import std.stdio;
class
outer
this
()void
foo()
}void
main()
這個特性可能應用並不是很廣吧。
3、mixin多個析構函式。
template a()
~this()}
template b()
}class
cvoid
main()
這些析構函式會和mixin相反的順序執行。我不明白的是,為什麼不讓mixin多個建構函式?為何不讓這些建構函式晚於被mixin的類(上面的c類)的建構函式,並按mixin進來的順序執行?
D語言 DMD 0 166發布
這一版本在強大的民意壓力之下取消了上一版的 隱式轉換表示式為委託 這一特性,取而代之的是乙個lazy關鍵字。取消的理由是這個轉換太隱晦了,最好是顯式地標示出這種轉換,所以引入乙個lazy關鍵字。d語言還在發展中,很多特性都在嘗試,這種修改也不是第一次了。首先看看這個lazy。void log cha...
TypeScript 2 5 發布,增加語言級重構
在 typescript 2.5 版本中,microsoft 專注於提高開發人員的生產力,其範圍已經超出了 編輯器所提供的常見功能。u0026 xd u0026 xd u0026 xd typescript 是基於編輯經驗開發的一種語言,因此我們團隊在編輯器 型別檢查器以及支援編輯器 如 vs co...
TypeScript 2 5 發布,增加語言級重構
在 typescript 2.5 版本中,microsoft 專注於提高開發人員的生產力,其範圍已經超出了 編輯器所提供的常見功能。typescript 是基於編輯經驗開發的一種語言,因此我們團隊在編輯器 型別檢查器以及支援編輯器 如 vs code 的語言服務方面投入了精力。它不僅僅是 vs 和 ...