首页 文章

使用NIM进行基本字符串格式化

提问于
浏览
2

我正在尝试做一些非常基本的字符串格式化,我立即被卡住了 .

这段代码有什么问题?

import strutils
import parseopt2

for kind, key, val in getopt():
    echo "$1 $2 $3" % [kind, key, val]

我得到 Error: type mismatch: got (TaintedString) but expected 'CmdLineKind = enum' 但我不明白我该怎么办呢 .

1 回答

  • 4

    这里的问题是Nim的格式化操作符 % 需要一个具有相同类型的对象数组 . 由于此处数组的第一个元素具有 CmdLineKind 枚举类型,因此编译器期望其余元素具有相同的类型 . 显然,你真正想要的是拥有 string 类型的所有元素,你可以通过显式地将第一个参数转换为字符串(使用 $ 运算符)来强制执行此操作 .

    import strutils
    import parseopt2
    
    for kind, key, val in getopt():
      echo "$1 $2 $3" % [$kind, key, val]
    

    如果您还想知道错误消息中出现的这个 TaintedString 类型是什么,这是一种特殊类型,表示程序的未经验证的外部输入 . 由于未经验证的输入数据存在安全风险,因此该语言支持特殊的"taint mode",可帮助您跟踪输入可能需要验证的位置 . 此模式的灵感来自Perl编程语言中提供的一组类似功能:

    http://docstore.mik.ua/orelly/linux/cgi/ch08_04.htm

相关问题