d - 非成员(member)范围功能

标签 d

我有一个要为其实现范围的类。我想以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/

相关文章:

d - 为什么 D 的变体看起来令人困惑

hash - D语言无符号字符串散列

templates - 无法解析模板函数的类型

user-interface - gtkD:最小绘图示例?

foreach - 如何使 Range 与 foreach 语句一起使用

open-source - D 中是否有任何开源项目?

string - 从 D 中的 float 转换为 const(char)*

null - 正确使用 NotNull

type-inference - D 中的函数和委托(delegate)文字

c++ - 如何在 Windows 上使用 C++ 中的 SWIG for D?