ddip1043短方法语法
概述
该DIP为函数定义提出了短语法.新语法使用=>分隔函数头和函数体来代替左大括号和右大括号:
int add(int x, int y) pure => x + y;
已在D语言中作为预览实现
原理(一致/简洁)
D语言已支持函数字面的短语法.如:
const succ = (int x) => x + 1;
//等价
const succ = function(int x) { return x + 1; };
细微的更改语言,可为函数定义实现类似语法,使函数字面和函数定义更加统一.
考虑简单InputRange,它产生一系列T不包括一端([from,to))的s.无建议语法的D中的实现是14行:
struct LongerExclusiveRange(T)
{
T from, to;
invariant(from <= to);
bool empty() {
return from == to;
}
void popFront() {
++from;
}
T front() {
return from;
}
}
用提议特性实现只有8行:
struct ExclusiveRange(T)
{
T from, to;
invariant(from <= to);
bool empty() => from == to;
auto popFront() => ++from;
T front() => from;
}
用该语法简化函数为动作.
这样,可以带任意但具有代表性的区间组合.
auto doesWork()
=> iota(1, 100)
.map!(x => x + 1)
.filter!(x => x > 4)
.each!writeln;
由于构造器和析构器不能有返回值,实现应拒绝使用短语法实现他们,并提供有意义的错误消息.
浙公网安备 33010602011771号