[D语言] DMD 0.166发布

这一版本在强大的民意压力之下取消了上一版的“隐式转换表达式为委托”这一特性,取而代之的是一个lazy关键字。

取消的理由是这个转换太隐晦了,最好是显式地标示出这种转换,所以引入一个lazy关键字。D语言还在发展中,很多特性都在尝试,这种修改也不是第一次了。

首先看看这个lazy。

上一版实现了这样一个特性:

void  log( char []  delegate () msg){
  writefln(msg());
}

log(
" Hello,  "   ~   " Li Jie! \n "   ~   " Welcome! " );

log的参数被隐式转化为一个委托,这样只有用到这个值的时候才真正求值。

由于这种隐式转化很容易形成陷阱,所以这一版改为一个lazy关键字,看起来要简洁一些了:

void  log(lazy  char []  msg){
  writefln(msg);
}

log(
" Hello,  "   ~   " Li Jie! \n "   ~   " Welcome! " );

log函数中使用msg这个变量就会调用那个隐式的委托,要注意的是每次取msg的值都会执行这个委托,所以我觉得这个陷阱更大了,当然它把陷阱丢给编写代码的人,而不是使用代码的人,所以好坏还无从分辨。

下面这点代码可以演示这个小陷阱:

void  foo(lazy  int  a){
  
int  b  =  a + 1 ;
  
int  c  =  a * 3 ;
  
int  d  =  a / 2 ;
}

int  bar(){
  writefln(
" Call bar() " );
  
return   12 ;
}

foo(bar());

看起来bar好像会执行一次,实际上这段代码会打印出3行"Call bar()",原来使用委托还可以看到一个显式的函数调用呢。

另一个member templates特性未见到文档,猜想大概是支持成员函数模板吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值