使用 echo 在 Nim 中打印一个数组
printing an array in Nim using echo
按照此处的示例: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 上安装了 im Compiler Version 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,它试图 return 标准 Nim 的值语法表示或 marshal
模块,它可以在 json:
中编码任意类型
var sum = mat1 + mat2
echo sum.repr
import marshal
echo $$sum
在此特定示例中,两个选项产生相同的结果:
[[1, 1], [1, 1]]
[[1, 1], [1, 1]]
按照此处的示例: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 上安装了 im Compiler Version 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,它试图 return 标准 Nim 的值语法表示或 marshal
模块,它可以在 json:
var sum = mat1 + mat2
echo sum.repr
import marshal
echo $$sum
在此特定示例中,两个选项产生相同的结果:
[[1, 1], [1, 1]]
[[1, 1], [1, 1]]