虾皮跨境电商网站,东莞整站优化推广公司找火速,wordpress怎么修改主题首页,房地产公司基本介绍原文 关于映射带模板参数的函数,我惊讶地发现它仍可同运行时确定的函数,甚至是闭包等工作.我想理解它背后的机制. 注释掉的行会导致错误,即编译时无法确定choice(funcs),这是公平的,但它为何与上面两行的func不一样?我猜是因为函数在编译时是可见的字面,但闭包使这可疑.
impo…原文 关于映射带模板参数的函数,我惊讶地发现它仍可同运行时确定的函数,甚至是闭包等工作.我想理解它背后的机制. 注释掉的行会导致错误,即编译时无法确定choice(funcs),这是公平的,但它为何与上面两行的func不一样?我猜是因为函数在编译时是可见的字面,但闭包使这可疑.
import std.stdio;
import std.algorithm;
import std.random;
void main()
{int r uniform(0,100);int delegate(int)[] funcs [x x * 2,x x * x,x 3,x x * r //闭包];auto foo [1,2,3,4,5];foreach(i; 0..10){//很好:auto func funcs.choice;writeln(foo.map!func);//但如下不行.//writeln(foo.map!(funcs.choice));}
}事实上,下例中,编译时不可能知道函数,模板是如何实例化的?:
auto do_random_map(int delegate(int)[] funcs, int[] values)
{auto func funcs.choice;return values.map!func;
}感谢你的见解!
这很简单,如果参数是运行时函数,则按函数指针(或闭包)对待它.
按运行时绑定的闭包对待该参数.实例化时,从调用者的环境,插入填充码以传递闭包.