gpt4 book ai didi

for-loop - 尼姆 : How to iterate over a slice?

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

我对以下观察感到困惑。一方面,这有效:

for i in 5..10:
echo i

但是一旦我将切片存储在一个变量中,我就不能再对其进行迭代,即,这会失败:
var slice = 5..10
for i in slice:
echo i

错误是 type mismatch: got (Slice[system.int]) ,并且显然没有 system.items 的重载签名 Slice[T] 的迭代器.这就提出了以下问题:
  • 为什么它在第一种情况下完全有效?
  • 在第二种情况下是否有一种解决方法来遍历切片?
  • 最佳答案

    for i in 5..10:你调用迭代器 .. (doc) , 这只是 countup 的别名。由于这是一个内联迭代器,它将 for 循环转换为值 5 到 10 的 while 循环。但是内联迭代器不能分配给一个变量,除了闭包迭代器。

    var slice = 5..10你调用过程 .. (doc) ,这会生成 Slice(a: 5, b: 10) .但是 Slices 没有默认的 items迭代器定义。

    您可以从 slice.a 进行迭代至slice.b , 像这样:

    var slice = 5..10
    for i in slice.a .. slice.b:
    echo i

    由于这不是很好,正确的解决方案是定义自己的 items迭代器,像这样:
    iterator items*[T](s: Slice[T]): T =
    for i in s.a .. s.b:
    yield i

    var slice = 5..10
    for i in slice:
    echo i

    因为这对我来说似乎很合理,所以我提出了一个请求,将其包含在系统模块中: https://github.com/nim-lang/Nim/pull/2449

    关于for-loop - 尼姆 : How to iterate over a slice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29428702/

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