当前位置:  开发笔记 > 编程语言 > 正文

使用echo在Nim中打印数组

如何解决《使用echo在Nim中打印数组》经验,为你挑选了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上安装了编译器版本0.12.0 - 可能不是最新版本).

然而,有一种智能的方式来打印任何类型的实体.Python中有没有pprint?



1> zah..:

$错误消息中引用的运算符是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的reprproc,它试图返回值或marshal模块的标准Nim语法表示,它可以在json中编码任意类型:

var sum = mat1 + mat2

echo sum.repr

import marshal
echo $$sum

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

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

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

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有