D语言 - 混合(Mixins)

D语言 - 混合(Mixins) 首页 / D语言入门教程 / D语言 - 混合(Mixins)

Mixins是允许将生成的代码混合到源代码中的结构, Mixins可以是以下类型-

  • String Mixins
  • Template Mixins
  • Mixin name spaces

字符串混合

只要在编译时就知道该字符串,D就可以将代码作为字符串插入,字符串混合的语法如下所示-

链接:https://www.learnfk.comhttps://www.learnfk.com/d-programming/d-programming-mixins.html

来源:LearnFk无涯教程网

mixin (compile_time_generated_string)

字符串混合的简单如下所示。

import std.stdio; 
 
void main() { 
   mixin(`writeln("Hello Learnfk!");`); 
}

编译并执行上述代码后,将产生以下输出-

Hello Learnfk!

这是另一个示例,我们可以在编译时传递字符串,以便mixin可以使用函数来重用代码。如下所示。

import std.stdio;

string print(string s) {
   return `writeln("` ~ s ~ `");`; 
}
  
void main() { 
   mixin (print("str1")); 
   mixin (print("str2")); 
}

编译并执行上述代码后,将产生以下输出-

str1
str2

模板混合

D模板定义了通用的代码模式,供编译器从该模式生成实际,模板可以生成函数,结构,联合,类,接口和任何其他合法的D代码。模板mixin的语法如下所示。

无涯教程网

mixin a_template!(template_parameters)

下面显示了一个字符串mixin的简单示例,其中我们使用Department类创建一个模板,并化一个template的mixin,从而使结构学院可以使用setName和printNames函数。

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(); 
}

编译并执行上述代码后,将产生以下输出-

The names 
0 : name1 
1 : name2 

混合名称空间

混入名称空间用于避免模板混入中的歧义,如,可以有两个变量,一个在main中显式定义,另一个在mixin中,当混合名称与周围范围中的名称相同时,周围范围中的名称将得到用过的。该如下所示。

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(); 
}

编译并执行上述代码后,将产生以下输出-

name 1 
name 2

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入拆解Java虚拟机 -〔郑雨迪〕

分布式技术原理与算法解析 -〔聂鹏程〕

摄影入门课 -〔小麥〕

说透敏捷 -〔宋宁〕

Java业务开发常见错误100例 -〔朱晔〕

人人都用得上的写作课 -〔涵柏〕

手机摄影 -〔@随你们去〕

物联网开发实战 -〔郭朝斌〕

全链路压测实战30讲 -〔高楼〕

好记忆不如烂笔头。留下您的足迹吧 :)