D中的扩展函数

时间:2011-10-14 21:24:33

标签: d dmd gdc

我不久前买了“D编程语言”。好书,很有教育意义。但是,我在编写本书中列出的语言功能时遇到了麻烦:扩展函数。

在书中,安德烈写道任何函数(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会向数组添加方法,因此它似乎在某种程度上实现。

2 个答案:

答案 0 :(得分:12)

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

以下是在实施此功能时将关闭的错误报告:Issue 3382

答案 1 :(得分:2)

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

Dobbs博士有一篇很好的文章:Uniform Function Call Syntax on Dr. Dobbs