如何编写代码实现外部闭包中下

本篇内容介绍了“如何编写代码实现外部闭包中下”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联建站基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业服务器托管报价,主机托管价格性价比高,为金融证券行业BGP机房服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。

在函数定义点:

需要在虚拟包装器类型内定义函数,

需要从伪类型上下文指针转换为所需的实际类型;

这会丢弃上下文指针类型的所有类型安全性,并导致运行时开销

在函数调用点:

需声明个虚拟类型实例;请注意,此声明除了获得该函数的闭包外没有其他用途.

提取到闭包后,将ptr其设置为独立的语句,该语句为运行时错误创建新位置

要设置闭包上下文指针,必须将类型强制转换为(空*);像定义点一样,这会丢弃上下文指针类型的任何类型安全性,并会导致一些运行时开销.

而外(闭包)解决方法很简单,清晰,类型安全.没有伪包装器类型,没有在定义点或调用点进行转换,没有运行时开销,并且在类型安全语句中提取闭包.

外(闭包)空 writelnWithTime(ref File file,string msg)
{
   file.writeln(Clock.currTime,"  ",msg);
}

文件 文件;
动 我们闭包=&file.writelnWithTime;

重大更改/弃用过程

该建议仅要求用不会破坏d的新语法.

例子

==

演示用法的示例:

构  Foo
{
   空 巴(int x)
   {
   }
}
外(闭包)空 baz(ref Foo foo,int x)
{
}

//注意,即使在`foo构`内定义`bar`成员函数
//`baz`函数也与`bar`ABI相同.

空 闭包(int)dg;
Foo foo;

dg=&foo.bar;    //普通成员函数闭包
dg(42);         //调用foo.bar(42)

dg=&foo.baz;  //使用UFCS提取`外(闭包)`baz函数的闭包
dg(42);//调用baz(foo,42);

dg=&baz;//错误:无法将`外(闭包)`类型空函数(ref Foo,int)类型的表达式(baz)隐式转换为`空 闭包(int)`

更现实例子:

导入 std.stdio,std.datetime ;

外(闭包)空 writelnWithTime(T)(ref File foo,T[]buffer)
{
   foo.writeln(Clock.currTime,"  ",buffer);
}

空 main()
{
   dumpInfo(&stdout.writeln!(const(char)[])));
   //使用UFCS获取闭包给`外(闭包)`writelnWithTime函数
   dumpInfo(&stdout.writelnWithTime!(const(char)[]))
}

空 dumpInfo(空 闭包(const(char)[])writer)
{
   writer(" 一 Info:");
   writer("   2 = 2 ");
   writer("   3!= 4 ");
}

“如何编写代码实现外部闭包中下”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


当前标题:如何编写代码实现外部闭包中下
文章网址:http://hbruida.cn/article/ggeiee.html