Lawrence Aberba

撰写评论

嘿 Arthur,UFCS 帮助避免编写像这样的代码:finish(make(bake(1,4)));

在 D 中,你可以这样写:bake(1,2).make(). finish () 或者更惯用的是:1.bake(3).make.finish。因此,它按照您在阅读代码时在脑海中处理它的顺序读取。

任何其他额外的参数都像这样写入 1.call(2,3,4,5,...)。当然,只有在特定情况下使用 UFCS 才有意义。

UFCS 实际上只是一个语法技巧。它不会带来额外的性能成本。D 编译器在编译期间将其重写为正常的样式。但对于程序员来说,UFCS 只是美化了你的代码。因此,与使用类相比,它更轻量级。有时人们编写类来获得类似的感觉,但使用 D UFCS 可以给你带来这种体验。UFCS 没有内置到类型中,它只是一种语法糖。

我不熟悉 .Net 扩展。但是,对于 D,编译器会像你正常调用它一样重写它。所以这对程序员来说是一种方便的语法。

所以 1.add(2): 在编译期间被重写为 add(2,2)。

© . All rights reserved.