按照此处的示例: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?
答案 0 :(得分:7)
错误消息中引用的$
运算符是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,它尝试返回值的标准Nim语法表示或marshal
模块,它可以在json中编码任意类型:
var sum = mat1 + mat2
echo sum.repr
import marshal
echo $$sum
在这个特定的例子中,两个选项产生相同的结果:
[[1, 1], [1, 1]]
[[1, 1], [1, 1]]