map - 在 D2 中将 std.algorithm.map 与成员函数一起使用

标签 map range d phobos

我有:

Foo foo = new Foo();

foreach (i; 0..10)
{
  Bar bar = foo.getBar(i);
  ...
}

我希望能够改为(等效地)说:
foreach (bar; foo.getAllBars())
{
  ...
}

我该如何实现 getAllBars() ?

我想到了这样的事情:
class Foo
{
  auto getAllBars()
  {
    return map!(getBar)(iota(10));
  }
}

但是你当然不能这样做,因为 getBar取决于 this参数,这将超出范围。如果您尝试创建本地 function,这同样适用或 delegate .我还考虑用 opCall 创建一个函数对象, 但你不能用 map (你可以吗?)。

一些要求:
  • 返回的范围必须是惰性的(因此不要先将其复制到数组中)
  • 假设 getBar是获取数据的唯一方法。
  • 我希望 map 被类封装(即不将 map 移动到调用站点)。
  • 最佳答案

    std.algorithm.map通过模板别名参数工作,并且绑定(bind)在编译时进行。 Walter Bright(D 语言设计者)在这些情况下还不清楚模板别名参数的语义,尽管您尝试做的事情似乎在实践中以某种方式起作用。澄清这是一个待办事项(我认为)。也许您最好在 digitalmars.d 新闻组上问这个问题,因为这会引起 Walter 的注意并鼓励他澄清语义。

    关于map - 在 D2 中将 std.algorithm.map 与成员函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3848173/

    相关文章:

    C# 字典 : Multiple KEYS per Value

    c++ - 计算 STL map 不相交子范围平均值的有效方法

    excel - VBA Excel将数据打印到有关范围数据的即时窗口中以测试理解

    profiling - D 编译器分析

    c# - 为什么带有 protected 修饰符的函数可以在任何地方被覆盖和访问?

    google-maps - 半径谷歌地图中的邮政编码

    scala - 为什么Option没有折叠方法?

    arrays - 如何从具有重复范围的数组中获取具有唯一范围的数组?

    algorithm - 使用预处理在 O(1) 时间内查询数组中的范围中值

    d - 我可以指定最小配音或 DMD 版本吗?