gpt4 book ai didi

Dlang 切片和数字范围

转载 作者:行者123 更新时间:2023-12-04 12:20:51 26 4
gpt4 key购买 nike

我不知道如何在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com