按照这里的例子: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])
Run Code Online (Sandbox Code Playgroud)
我假设这是版本问题(我在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"
Run Code Online (Sandbox Code Playgroud)
这导致预期的输出:
1 1
1 1
Run Code Online (Sandbox Code Playgroud)
与通用打印操作符最接近的是Nim的reprproc,它试图返回值或marshal模块的标准Nim语法表示,它可以在json中编码任意类型:
var sum = mat1 + mat2
echo sum.repr
import marshal
echo $$sum
Run Code Online (Sandbox Code Playgroud)
在此特定示例中,两个选项都会产生相同的结果:
[[1, 1], [1, 1]]
[[1, 1], [1, 1]]
Run Code Online (Sandbox Code Playgroud)