cod*_*ons 8 formatting printf nested-lists rakudo raku
文档说fmt
\n\n返回一个字符串,其中列表中的每个元素均已根据
\n$format[第一个参数] 进行格式化,并且每个元素均由$separator[第二个参数] 分隔。
根据该描述,我希望能够调用.fmt列表列表,然后传递一个printf-style 格式字符串,其中%包含内部列表中每个元素的指令。但这是行不通的。
如果您告诉我我对 ^^^^ 的看法是错误的,我会期望它.fmt会自动展平其参数,因此每个参数都会被格式化并由$separator. 但事实并非如此。
相反,运行此代码
\n\nsay (<a b c>, <1 2 3>, <X Y Z>).fmt(\'\xe2\x86\x92%03s|\', "\\n=================\\n");\nRun Code Online (Sandbox Code Playgroud)\n产生这个输出:
\n\xe2\x86\x9200a| \xe2\x86\x9200b| \xe2\x86\x9200c|\n=================\n\xe2\x86\x92001| \xe2\x86\x92002| \xe2\x86\x92003|\n=================\n\xe2\x86\x9200X| \xe2\x86\x9200Y| \xe2\x86\x9200Z|\nRun Code Online (Sandbox Code Playgroud)\n也就是说,格式字符串应用于内部列表中的每个元素,然后对这些列表进行字符串化(不使用格式字符串;注意 每个|和\xe2\x86\x92字符之间),然后在每个外部列表之间插入分隔符列表之间插入分隔符。
这给我留下了三个问题:
\n编辑:
\n经过进一步调查,我意识到,只有在格式字符串包含宽度指令时,才会出现上面观察到的行为。更改\xe2\x86\x92%03s|上面的格式字符串以\xe2\x86\x92%s|产生以下输出:
\xe2\x86\x92a b c|\n=================\n\xe2\x86\x921 2 3|\n=================\n\xe2\x86\x92X Y Z|\nRun Code Online (Sandbox Code Playgroud)\n也就是说,如果没有宽度,格式字符串将在列表字符串化之后而不是之前应用。
\n所以我又开始感到困惑/认为至少其中一些行为一定是有问题的。
\n好吧,看起来这里至少有两个错误。这应该通过https://github.com/rakudo/rakudo/commit/a86ec91e36修复。为这些情况编写 Spectest,我们将不胜感激:-)