为啥 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 上的行为不同?

为啥 JSON 中 datetime 的行为在不同系统(win xp,server 2003)上有所不同?

为啥 GPU 外的顶点变换与 GPU 内的顶点变换不同?