這一版本在強大的民意壓力之下取消了上一版的「隱式轉換表示式為委託」這一特性,取而代之的是乙個lazy關鍵字。
取消的理由是這個轉換太隱晦了,最好是顯式地標示出這種轉換,所以引入乙個lazy關鍵字。d語言還在發展中,很多特性都在嘗試,這種修改也不是第一次了。
首先看看這個lazy。
void
log(
char
delegate
() msg)
log(
"hello, "~
"li jie! \n"~
"welcome!");
log的引數被隱式轉化為乙個委託,這樣只有用到這個值的時候才真正求值。
由於這種隱式轉化很容易形成陷阱,所以這一版改為乙個lazy關鍵字,看起來要簡潔一些了:
void
log(lazy
char
msg)
log(
"hello, "~
"li jie! \n"~
"welcome!");
log函式中使用msg這個變數就會呼叫那個隱式的委託,要注意的是每次取msg的值都會執行這個委託,所以我覺得這個陷阱更大了,當然它把陷阱丟給編寫**的人,而不是使用**的人,所以好壞還無從分辨。
下面這點**可以演示這個小陷阱:
void
foo(lazy
inta)
intbar()
foo(bar());
看起來bar好像會執行一次,實際上這段**會列印出3行"call bar()",原來使用委託還可以看到乙個顯式的函式呼叫呢。
另乙個member templates特性未見到文件,猜想大概是支援成員函式模板吧。
D語言 DMD 0 168發布
新特性 1 給委託增加ptr屬性,指向委託所繫結的物件。這是乙個語法糖,dg.ptr被轉化為cast void dg,它只能作右值,所以除了能讀取它以外,在語法上禁止對它賦值。要想把委託繫結到不同的物件,你只能自己實現 class foovoid bar void main void ptr cas...
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 和 ...