che*_*nyf 7 program-entry-point raku
Python的click模块有choice-options,当输入无效时:
\nimport click\n\n@click.command()\n@click.option(\'--hash-type\',\n type=click.Choice([\'MD5\', \'SHA1\'], case_sensitive=False))\n\ndef digest(hash_type):\n click.echo(hash_type)\n\n# python demo.py --hash-type=HASH256\n# Error: Invalid value for \'--hash-type\': \'HASH256\' is not one of \'MD5\', \'SHA1\'.\nif __name__=="__main__":\n digest()\nRun Code Online (Sandbox Code Playgroud)\n当用户输入无效的选择时,上面的脚本将退出,并为您打印出有效的选择,这很方便。
\n我尝试用 Raku 重写它:
\n# raku demo.raku --hash_type=HASH256\nsub MAIN(\n :$hash_type where * \xe2\x88\x88 [\'MD5\', \'SHA1\'], #= the hash code\n) {\n say $hash_type;\n}\nRun Code Online (Sandbox Code Playgroud)\n当提供无效选择时,Raku 仅输出用法,这不太好:
\nUsage:\n demo.raku [--hash_type[=Any where { ... }]]\n --hash_type[=Any where { ... }] the hash code\nRun Code Online (Sandbox Code Playgroud)\n那么,如果命令行输入的值不在 MAIN 例程中的有效选择列表中,如何获得更好的错误提示呢?
\nenum HT <MD5 SHA1>;
sub MAIN(
HT :$hash_type!,
) {
say $hash_type;
}
Run Code Online (Sandbox Code Playgroud)
Usage:
-e '...' [--hash_type=<HT> (MD5 SHA1)]
--hash_type=<HT> (MD5 SHA1) the hash code
Run Code Online (Sandbox Code Playgroud)