3

如何檢查變量是否存在,即是否已在D中聲明?如何檢查變量是否在D中聲明?

背景是,我想使用的版本情況,但仍然有一個默認值:

version(A) 
{ 
    immutable int var = 1; 
} 
version(B) 
{ 
    immutable int var = 2; 
} 
// this is pseudo code 
if (var is not yet declared) 
{ 
    immutable int var = 3; 
} 

我只是認爲這是可能的d,因爲它有這麼多的反省......

回答

10

那麼,考慮到你的用例看起來是什麼,你就會錯誤地解決它。你真的應該做些更喜歡

version(A) 
{ 
    immutable int var = 1; 
} 
else version(B) 
{ 
    immutable int var = 2; 
} 
else 
{ 
    immutable int var = 3; 
} 

但在一般情況下,如果你正在尋找專門測試符號是否存在,使用is(typeof(symbol))其中symbol是你用於測試符號的名稱。所以,如果你想測試變量var是否存在,你會做這樣的事情

static if(is(typeof(var))) 
{ 
    //var exists 
} 

,當然,以測試它不存在,你只是否定條件:

static if(!is(typeof(var))) 
{ 
    //var does not exist 
} 

typeof(exp)獲取表達式的類型,如果表達式無效(由於變量不存在或表達式中的某個函數不適用於這些參數或其他),則結果爲voidis(type)檢查類型是否爲非void。因此,is(typeof(exp))測試exp是否是一個有效的表達式,並且在它只是一個符號名稱的情況下,這意味着它正在測試它是否是有效的符號。

+0

第一個是我所需要的。我不知道'version'與'if else'類型的語法一起工作。感謝您的解決方案。至於第二個「解決方案」:我嘗試了'typeof',但沒有'()',所以我得到一個編譯器錯誤。我學到了兩倍於我的預期;) – steffen 2013-02-09 13:31:13

+0

還有'__traits(compiles,foo)',這也可以...... – vines 2013-03-12 22:12:17