我正在尝试做一些非常基本的字符串格式化,我立即被卡住了 .
这段代码有什么问题?
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' 但我不明白我该怎么办呢 .
Error: type mismatch: got (TaintedString) but expected 'CmdLineKind = enum'
这里的问题是Nim的格式化操作符 % 需要一个具有相同类型的对象数组 . 由于此处数组的第一个元素具有 CmdLineKind 枚举类型,因此编译器期望其余元素具有相同的类型 . 显然,你真正想要的是拥有 string 类型的所有元素,你可以通过显式地将第一个参数转换为字符串(使用 $ 运算符)来强制执行此操作 .
%
CmdLineKind
string
$
import strutils import parseopt2 for kind, key, val in getopt(): echo "$1 $2 $3" % [$kind, key, val]
如果您还想知道错误消息中出现的这个 TaintedString 类型是什么,这是一种特殊类型,表示程序的未经验证的外部输入 . 由于未经验证的输入数据存在安全风险,因此该语言支持特殊的"taint mode",可帮助您跟踪输入可能需要验证的位置 . 此模式的灵感来自Perl编程语言中提供的一组类似功能:
TaintedString
http://docstore.mik.ua/orelly/linux/cgi/ch08_04.htm
1 回答
这里的问题是Nim的格式化操作符
%
需要一个具有相同类型的对象数组 . 由于此处数组的第一个元素具有CmdLineKind
枚举类型,因此编译器期望其余元素具有相同的类型 . 显然,你真正想要的是拥有string
类型的所有元素,你可以通过显式地将第一个参数转换为字符串(使用$
运算符)来强制执行此操作 .如果您还想知道错误消息中出现的这个
TaintedString
类型是什么,这是一种特殊类型,表示程序的未经验证的外部输入 . 由于未经验证的输入数据存在安全风险,因此该语言支持特殊的"taint mode",可帮助您跟踪输入可能需要验证的位置 . 此模式的灵感来自Perl编程语言中提供的一组类似功能:http://docstore.mik.ua/orelly/linux/cgi/ch08_04.htm