为啥 comb 在循环内的行为不同?
Posted
技术标签:
【中文标题】为啥 comb 在循环内的行为不同?【英文标题】:Why does comb behave differently inside the loop?为什么 comb 在循环内的行为不同? 【发布时间】:2019-11-21 14:05:20 【问题描述】:注意:我在 REPL 中使用 这是基于 MoarVM 版本 2019.03 构建的 Rakudo Star 版本 2019.03.1 实现 Perl 6.d。
从 euler 项目 #22 中有一个 names.txt 文件,类似于 "JERE","HAI","ELDEN","DORSEY","DARELL","BRODERICK","ALONSO", ...
当我读到它时,拆分并排序它,我得到了我期望的名字列表。
for '../names.txt'.IO.slurp.split(',').sort -> $name
say $name;
打印出来
...
"ZONIA"
"ZORA"
"ZORAIDA"
"ZULA"
"ZULEMA"
"ZULMA"
现在如果我添加comb()
for '../names.txt'.IO.slurp.split(',').sort -> $name
say $name.comb;
我明白了
...
(" Z O N I A ")
(" Z O R A ")
(" Z O R A I D A ")
(" Z U L A ")
(" Z U L E M A ")
(" Z U L M A ")
但是,如果我只是从 repl 中运行;
> "ZULMA".comb
我明白了
(Z U L M A) # 注意没有引号
为什么comb
在这两种情况下表现不同?
【问题讨论】:
在 REPL 中(承认 @Holli 的例子):> "ZULMA".raku.comb
返回 (" Z U L M A ")
。
【参考方案1】:
它的行为并没有不同。在一种情况下,引号是语法元素 - 代码的一部分 - 在另一种情况下,数据从文件中逐字读取:
"ZULMA".comb
'"ZULMA"'.comb
数据不同。不是行为。
【讨论】:
突然间看起来如此明显。谢谢。 @jmcneirney 我的基因必须克服松散的结局;您是否忘记单击此答案的接受按钮(复选标记)?以上是关于为啥 comb 在循环内的行为不同?的主要内容,如果未能解决你的问题,请参考以下文章
为啥将 VB.NET 代码迁移到 C# 时,for 循环的行为会有所不同?
为啥 Java 正则表达式在 Linux 和 Windows 上的行为不同?