我有一个要为其实现范围的类。我想以phobos库的方式来实现这些功能,即在主类之外。
void popBack(T)(ref T[] a) if (!is(Unqual!T == char) && !is(Unqual!T == wchar))
{
assert(a.length);
a = a[0 .. $ - 1];
}
这是我的版本:
void popFront(T)(ref PersistentList!(T) a)
{
a = a.next();
}
当我尝试使用前端编译此代码时,我得到:
Error 1 Error: no property 'popFront' for type 'stmd.PersistentList!(int).PersistentList' main.d
我可以将成员代码移到主类中,但是由于我正在修改输入的“ref”值,因此我不能使用popFront(),我确实需要popFront(ref a)。
我究竟做错了什么?
最佳答案
您要做什么取决于D社区所谓的统一函数调用语法。这是用与成员函数相同的语法调用非成员函数的能力。这对于数组仅实现了很长时间,关于它走多远有一些争论。已经决定应该对所有类型都实现它,但是编译器实现者Walter Bright尚未做到这一点,因为他一直在努力开发64位支持。
统一函数调用语法在Andrei Alexandrescu的书“The D Programming Language”中进行了描述,该书被认为是D2的权威指南。它当前缺乏实现,被认为是一个错误。此问题应在几个发行版中修复。
关于d - 非成员(member)范围功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868511/