Dlang 切片和数字范围

标签 d

我不知道如何在 D 中调用“..”运算符。我见过它:

// Slicing 
int[] t = list[3..$];

// Looping
foreach (x; 1..10) {}

但似乎我不能在某些“合乎逻辑”的地方使用它,例如:
int[] test = 1..N;
auto harmonic_serie = map!"1 / a"(1..1000);

“..”只是只能用于切片和循环的语法糖吗?我们是否被迫使用可读性较差的 std.range.iota?

最佳答案

..仅用于切片,foreach , 和范围的 case 语句。这些上下文都不需要创建任何类型的结构或列表来完成它的工作。切片基本上只是取并使用两个索引,而 foreach只是降低到 for使用从第一个值开始并递增直到达到第二个的计数器循环。对于 ..要在其他上下文中工作,它需要降低到某种实际对象或从值生成某种列表,这要复杂得多(至少就实现而言)。因此,该语言不会执行任何操作。为了让它做你正在寻找的事情,编译器实际上必须能够生成范围,并且它所了解的关于范围的所有内容都是使用 foreach 迭代它们所需的内容。 .
std.range.iota实际上创建了一个结构体,它是一个范围并且不需要编译器或语言了解它是如何工作的。因此,它可以用于需要对象来表示值范围和 .. 的地方。不会工作。

我确信在技术上可以制造 ..生成类似 iota 的内容在其他情况下,但 D 语言设计者在这一点上采取的方法是,如果可以在库中而不是在语言中完成某事,则应该在库中完成,如果有的话,他们会后悔在库中添加一些功能语言而不是把它们放在图书馆里。

关于Dlang 切片和数字范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744019/

相关文章:

macos - 为什么访问D类成员在OSX上崩溃?

gcc - D 编译器(Digital Mars D Compiler)抛出错误

d - `typeof(expr)` 的效率如何?

iterator - D 中 const 集合的迭代

c++ - 为什么我的 D 代码查找素数比我的 C++ 代码快得多?

profiling - D 编译器分析

d - 关于 'align' 属性的混淆

regex - 在 D 中的未转义字符上拆分字符串

d - 使用 GDC 链接到 DerelictGL3

D语言中的sizeof