D語言彆名
彆名,正如它的名字是指為現有名稱的替代名稱。彆名的語法如下所示。
alias new_name = existing_name;以下是較舊的語法,以防萬一指定一些較舊的格式的例子。不推薦使用。
alias existing_name new_name;
還有用於與表達,它是下麵給出中,我們可以直接使用,而不是表達的彆名另一種語法。
alias expression alias_name ;
可能了解,typedef增加了創建新類型的能力。彆名可以作為一個typedef類似的工作,甚至更多。一個簡單的例子,使用彆名,如下圖所示,使用std.conv頭,它提供了類型轉換的能力。
import std.stdio; import std.conv:to; alias to!(string) toString; void main() { int a = 10; string s = "Test"~toString(a); writeln(s); }
當上麵的代碼被編譯並執行,它會產生什麼結果如下:
Test10
在上麵的例子,而不是使用!string(a),我們已經分配給它的彆名的toString使其更方便和更容易理解,我們。
元組彆名
讓我們來看看另一個例子,我們可以為一個元組設置彆名。
import std.stdio; import std.typetuple; alias TypeTuple!(int, long) TL; void method1(TL tl) { writeln(tl[0]," ", tl[1] ); } void main() { method1(5, 6L); }
當上麵的代碼被編譯並執行,它會產生結果如下:
5 6
在上麵的示例中,類型的元組被分配給變量的彆名,它簡化了的方法的定義和變量的訪問。當我們嘗試重用這種類型的元組的這種訪問是更加有用。
彆名數據類型
很多時候,我們可以定義一個需要在整個應用程序中使用通用數據類型。當多個程序員編寫一個應用程序,它可以是情況下,一個人使用整型,另一雙等。為了避免這種衝突,我們經常使用類型的數據類型。一個簡單的例子如下所示。
import std.stdio; alias int myAppNumber; alias string myAppString; void main() { myAppNumber i = 10; myAppString s = "TestString"; writeln(i,s); }
當上麵的代碼被編譯並執行,它會產生什麼結果如下:
10TestString
類變量彆名
如果不熟悉的類和繼承的概念,看看關於classesand繼承教學開始本節之前。往往有規定,我們需要訪問的子類父類的成員變量,這可以成為可能的彆名,可能以不同的名稱。一個簡單的例子如下所示。
import std.stdio; class Shape { int area; } class Square : Shape { string name() const @property { return "Square"; } alias Shape.area squareArea; } void main() { auto square = new Square; square.squareArea = 42; writeln(square.name); writeln(square.squareArea); }
當上麵的代碼被編譯並執行,它會產生結果如下:
10TestString
this彆名
這個彆名提供了用戶自定義類型的自動類型轉換的能力。其語法如下所示,其中的關鍵字的彆名,這都寫在成員變量或者成員函數的兩側。
alias member_variable_or_member_function this;
一個例子如下所示,顯示此彆名的能力。
import std.stdio; struct Rectangle { long length; long breadth; double value() const @property { return cast(double) length * breadth; } alias value this; } double volume(double rectangle, double height) { return rectangle * height; } void main() { auto rectangle = Rectangle(2, 3); writeln(volume(rectangle, 5)); }
在上麵的例子中,可以看到,結構矩形轉換為double值,在彆名的幫助下這個方法。此代碼被編譯並執行,它會產生結果如下:
30