12

我不久前买了“The D Programming Language”。很棒的书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展功能。

在书中,Andrei 写道,任何函数(a, b) 都可以像这样调用:a.function(b); 所以我应该能够做到这一点:

struct Person {
    string name;
}

void foo(Person person, string name) {
    person.name = name;
}

void main() {
    auto bob = Person();
    bob.foo("Bob Dole");  // ERROR: Person does not have method 'foo'
}

正确的?这个功能还没有实现,还是我只是错过了什么?我注意到导入 std.range 会将方法添加到数组中,因此它似乎确实在某个级别上实现了。

4

2 回答 2

12

我认为您的意思是“伪成员”,如第 5.9.1 节所述。目前,此功能仅适用于阵列,尽管这是一个计划中的功能。在 D 社区中,您还会看到它被称为“统一函数调用语法”。

这是实现此功能时将关闭的错误报告:问题 3382

于 2011-10-14T21:42:18.980 回答
2

只想说明,统一函数调用语法已经实现。

有一篇关于 Dobbs 博士的不错的文章:Dobbs 博士的统一函数调用语法

于 2012-04-04T08:27:36.747 回答