我有一个我正在实现范围的类.我想以phobos库的方式实现这些功能,即在主类之外.
void popBack(T)(ref T[] a) if (!is(Unqual!T == char) && !is(Unqual!T == wchar))
{
assert(a.length);
a = a[0 .. $ - 1];
}
Run Code Online (Sandbox Code Playgroud)
这是我的版本:
void popFront(T)(ref PersistentList!(T) a)
{
a = a.next();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用forech编译此代码时,我得到:
Error 1 Error: no property 'popFront' for type 'stmd.PersistentList!(int).PersistentList' main.d
Run Code Online (Sandbox Code Playgroud)
我可以将成员代码移动到主类中,但由于我正在修改输入"ref"值,我不能使用popFront()我真的需要popFront(ref a).
我究竟做错了什么?
您想要做什么取决于 D 社区所谓的统一函数调用语法。这是使用与成员函数相同的语法调用非成员函数的能力。很长一段时间以来,这种方法仅在数组中实现,并且关于它能走多远存在一些争论。已经决定应该为所有类型实现它,但是编译器实现者 Walter Bright 还没有抽出时间来这样做,因为他一直在热衷于 64 位支持。
Andrei Alexandrescu 的《 The D 编程语言》一书中描述了统一函数调用语法,该书被认为是 D2 的权威指南。目前其缺乏实施被认为是一个错误。这应该在几个版本中得到修复。
| 归档时间: |
|
| 查看次数: |
207 次 |
| 最近记录: |