按照这里的例子: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
proc,它试图返回值或marshal
模块的标准Nim语法表示,它可以在json中编码任意类型:
var sum = mat1 + mat2 echo sum.repr import marshal echo $$sum
在此特定示例中,两个选项都会产生相同的结果:
[[1, 1], [1, 1]] [[1, 1], [1, 1]]