gpt4 book ai didi

nim-lang - 使用 echo 在 Nim 中打印数组

转载 作者:行者123 更新时间:2023-12-02 19:33:43 24 4
gpt4 key购买 nike

按照此处的示例:https://nim-by-example.github.io/arrays/我正在打印一个数组。在示例中,他们打印矩阵,但回显不起作用,我收到以下错误:

matrix.nim(20, 7) Error: type mismatch: got (Matrix[2, 2])
but expected one of:
system.$(x: T)
system.$(x: Enum)
system.$(x: int64)
system.$(x: bool)
system.$(x: char)
system.$(x: float)
system.$(x: string)
system.$(x: seq[T])
system.$(x: int)
system.$(x: uint64)
system.$(x: set[T])

我假设这是版本控制问题(我在 Ubuntu 上安装了编译器版本 0.12.0 - 可能不是最新的)。

但是有一种聪明的方法可以打印任何类型的实体。是否有像 Python 中那样的 pprint ?

最佳答案

错误消息中引用的 $ 运算符是 Nim 的“to string”运算符。 echo 期望为传入的类型定义这样的运算符。只是碰巧 Nim 的 system 模块的最新版本不包含 array 类型的 $ 定义。

您可以通过在自己的模块中添加以下定义来轻松修复代码:

proc `$`[T,R](m: Matrix[T,R]): string =
result = ""
for r in countup(1, m.H):
for c in countup(1, m.W):
if c != 1: result.add " "
result.add $m[r][c]

result.add "\n"

这会产生预期的输出:

1 1
1 1

最接近通用打印操作符的是 Nim 的 repr 过程,它尝试返回值或 marshal 模块的标准 Nim 语法表示形式,它可以在 json 中编码任意类型:

var sum = mat1 + mat2

echo sum.repr

import marshal
echo $$sum

在此特定示例中,两个选项产生相同的结果:

[[1, 1], [1, 1]]

[[1, 1], [1, 1]]

关于nim-lang - 使用 echo 在 Nim 中打印数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737123/

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