温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-10-13 09:17:47 来源:亿速云 阅读:113 作者:iii 栏目:编程语言

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

在函数定义点:

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

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

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

在函数调用点:

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

提取到闭包后,将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 ");
}

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

向AI问一下细节
推荐阅读:
  1. Python 闭包
  2. lua 闭包

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI