304 点数 | 关注 @aberbamx Sunyani, Ghana Lawrence 是一名自由职业的全栈工程师(React, Node.Js, D),并且是 100% 的 Linux 用户。他热爱设计和编码。对 SaaS 和现代 Web 充满热情。 思想开放 大众选择奖 作者 贡献者俱乐部
撰写评论
嘿 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)。