W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Mixins是允許將生成的代碼混合到源代碼中的結(jié)構(gòu), Mixins可以是以下類型-
只要在編譯時(shí)就知道該字符串,D就可以將代碼作為字符串插入,字符串混合的語法如下所示-
mixin (compile_time_generated_string)
字符串混合的簡(jiǎn)單如下所示。
import std.stdio;
void main() {
mixin(`writeln("Hello World!");`);
}
編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-
Hello World!
這是另一個(gè)示例,我們可以在編譯時(shí)傳遞字符串,以便mixin可以使用函數(shù)來重用代碼。如下所示。
import std.stdio;
string print(string s) {
return `writeln("` ~ s ~ `");`;
}
void main() {
mixin (print("str1"));
mixin (print("str2"));
}
編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-
str1
str2
D模板定義了通用的代碼模式,供編譯器從該模式生成實(shí)際,模板可以生成函數(shù),結(jié)構(gòu),聯(lián)合,類,接口和任何其他合法的D代碼。模板mixin的語法如下所示。
mixin a_template!(template_parameters)
下面顯示了一個(gè)字符串mixin的簡(jiǎn)單示例,其中我們使用Department類創(chuàng)建一個(gè)模板,并化一個(gè)template的mixin,從而使結(jié)構(gòu)學(xué)院可以使用setName和printNames函數(shù)。
import std.stdio;
template Department(T, size_t count) {
T[count] names;
void setName(size_t index, T name) {
names[index]=name;
}
void printNames() {
writeln("The names");
foreach (i, name; names) {
writeln(i," : ", name);
}
}
}
struct College {
mixin Department!(string, 2);
}
void main() {
auto college=College();
college.setName(0, "name1");
college.setName(1, "name2");
college.printNames();
}
編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-
The names
0 : name1
1 : name2
混入名稱空間用于避免模板混入中的歧義,如,可以有兩個(gè)變量,一個(gè)在main中顯式定義,另一個(gè)在mixin中,當(dāng)混合名稱與周圍范圍中的名稱相同時(shí),周圍范圍中的名稱將得到用過的。該如下所示。
import std.stdio;
template Person() {
string name;
void print() {
writeln(name);
}
}
void main() {
string name;
mixin Person a;
name="name 1";
writeln(name);
a.name="name 2";
print();
}
編譯并執(zhí)行上述代碼后,將產(chǎn)生以下輸出-
name 1
name 2
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: