toSeq(some_string) 类型不匹配

toSeq(some_string) Type Mismatch

我想将 string 转换为 seq[char],这样我就可以在 sequtils 中使用一些过程,但是 toSeq 模板有问题.

例如:

proc someproc(a, b: string): seq[tuple[a, b: char]] =
    let
        s1 = toSeq(a)
        s2 = toSeq(b)
    result = zip(s1, s2)

给出编译错误:

lib/pure/collections/sequtils.nim(329, 20) Error: type mismatch: got (seq[string], char)
but expected one of:
system.add(x: var string, y: char)
system.add(x: var string, y: string)
system.add(x: var seq[T], y: T)
system.add(x: var string, y: cstring)
system.add(x: var seq[T], y: openarray[T])

查看该模板:https://github.com/Araq/Nim/blob/master/lib/pure/collections/sequtils.nim#L292

我看到序列的类型由 iter 参数确定,在本例中是 string 而不是 char。这是模板中的错误,还是我错误地使用了这个模板?

我使用的是相当新的 Nim 10.3 版本

问题是你的表达式本身不是迭代器。我可以通过调用 items 让您的示例工作,即将 string 显式转换为迭代器:

proc someproc(a, b: string): seq[tuple[a, b: char]] =
  let
    s1 = toSeq(a.items)
    s2 = toSeq(b.items)
  result = zip(s1, s2)

我不知道这是否属于错误。如果你用任何不允许 for x in <your_expression> 的东西调用 toSeq ,那么你将得到一个有意义的错误。在您的情况下,这确实有效,因为 string 可以 converted 为迭代器。但是 return 类型的类型在上面的行中确定,您将简单地得到 seq[string]。尽管如此,在 Github.

上提交问题可能不会有什么坏处