D中的扩展方法?

Kri*_*ris 2 extension-methods d phobos

嘿伙计们,我正试图让这些语法对我有意义:

S[] split(S)(S s) if (isSomeString!S)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

string join(in string[] words, string sep)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

(如图所示phobos/src/std/string.d)

据我所知,这是一段允许我们做的事情的代码:

string[] parts = "/foo/bar/baz".split("/"); // string[] {"foo", "bar", "baz"}
string part = parts.join("-"); // string "foo-bar-baz"
Run Code Online (Sandbox Code Playgroud)

这基本上让我相信类似于我从CSharp中知道的扩展方法在d中是可能的.我遇到的问题是:

  1. 我不是100%肯定我在这里看正确的函数声明
  2. 我没看到是什么让他们相似.

lar*_*ivi 7

它们本身不是扩展方法,只是一些变成一个简洁功能的bug.

这两种方法之间的相似之处在于两者都有一个字符串作为第一个参数.所以在这里工作的技巧是给定一个数组T [] arr和一个函数

U foo (T[] t, other params)
Run Code Online (Sandbox Code Playgroud)

可以这样做

arr.foo(some arguments matching other params)
Run Code Online (Sandbox Code Playgroud)

  • 该功能称为"统一函数调用语法".不,它还没有在D2中用于其他类型.另见http://stackoverflow.com/questions/3868511/non-member-range-functions/3868943#3868943 (3认同)