2017-02-27 9 views
2

非常に基本的な文字列の書式設定をしようとしていますが、すぐに取り残されました。NIMによる基本的な文字列の書式設定

このコードで何が問題になっていますか?

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'を取得するが、私はそれを修正しなければならないかを理解していません。

答えて

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

関連する問題