您好,登录后才能下订单哦!
本篇内容介绍了“如何编写代码实现外部闭包中下”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
在函数定义点:
需要在虚拟包装器类型内定义函数,
需要从伪类型上下文指针转换为所需的实际类型;
这会丢弃上下文指针类型的所有类型安全性,并导致运行时开销
在函数调用点:
需声明个虚拟类型实例;请注意,此声明除了获得该函数的闭包外没有其他用途.
提取到闭包后,将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 ");
}
“如何编写代码实现外部闭包中下”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。