Jer*_*oen 1 foreach d operator-overloading
我一直试图通过D中的字符数组来预知,但我无法弄清楚如何让它工作.
public MyClass opApply(MyClass delegate(int[]) dg) {
// ...
return myClass;
}
foreach(MyClass a; [5,6,9,2]) {}
Run Code Online (Sandbox Code Playgroud)
您无法在示例中精确地执行您想要的操作,但您可以创建一个辅助方法/包装器对象来执行几乎相同的操作.
结果将是:
foreach(MyClass a; [5,6,9,2].byMyClass) {}
Run Code Online (Sandbox Code Playgroud)
该byMyClass函数看起来像这样:
MyClassRange byMyClass(int[] array) {
return MyClassRange(array);
}
Run Code Online (Sandbox Code Playgroud)
MyClassRange 是一个提供迭代的辅助对象:
struct MyClassRange {
int[] array;
this(int[] a) { array = a; }
import std.array;
bool empty() { return array.empty; }
void popFront() { array.popFront; }
MyClass front() { return new MyClass(array.front); }
}
Run Code Online (Sandbox Code Playgroud)
然后,那个东西可以用foreach.对于这个确切的例子顺便说一下你也可以使用foreach(MyClass c; [1,2,3].map!(a => new MyClass(a))).该map功能在std.algorithm.
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |