【发布时间】:2026-02-03 21:00:01
【问题描述】:
如果我有一个变量my $a = True,那么我会从以下代码中得到这个输出:
say «a list of words foo $a bar baz».raku;
# OUTPUT: ("a", "list", "of", "words", "foo", "True", "bar", "baz")
也就是说,即使结果是 List,元素 True 在被包含在列表中之前也会被字符串化 - 列表包含 "True",而不是 True。有什么办法可以在仍然使用插值的同时避免这种字符串化?
如果$a 是我定义的类(因此可以为其编写Str 方法)而不是Bool,是否有办法做到这一点?
(我知道我可以写更详细的("a", "list", "of", "words", "foo", $a, "bar", "baz") 或«a list of words foo».Slip, $a, «bar baz».Slip,但我想问是否有办法仍然使用插值)。
【问题讨论】:
-
我有两个理由问这个问题,尽管我相信答案是“不,那是不可能的”。首先,我可能错了——就像happened before 一样,我认为 Raku 不能做某事。其次,有这样的答案说“那是不可能的”可以避免其他用户搜索正确的语法来做一些永远不会工作的事情。 (并且列出 Raku 不能做的事情不适合文档。)如果您觉得这类问题很烦人,请告诉我;如果没有,我可能会在接下来的几天内问几个。
-
“当我认为 Raku 不能做某事的时候。” Raku 不能改变物理定律,但除此之外,没有 PL 能做的比 Raku 能做的更多。它包含一个图灵完备的 GPL。唯一的限制是诸如何时、如何有效以及如何轻松地完成它所做的事情。 Raku 支持MSP,因此 Raku 可以在编译时完成,无论“它”是什么。标准 Raku 已经附带了一些功能,使一些 MSP 任务变得容易。 RakuAST 以及在它之上构建的工具将使基本上所有 MSP 任务变得更容易更,包括用于甜蜜和性能的 MSP。
-
"如果您觉得这类问题烦人,请告诉我;如果不是,我可能会在接下来的几天内问几个。"我认为您对此提出的一百个深思熟虑的 Q 将是一件很棒的事情,尽管我敦促您将它们分散开来,等到您发布的 Q 得到您接受的答案,或者至少 N 天过去了(其中 N=2 感觉是正确的)没有接受的答案,然后发布下一个。
-
> “没有 PL 比 Raku 能做的更多。它包含一个图灵完备的 GPL。”我的意思是,这技术上是正确的。但是对于“Raku”和“不能做”的相当合理的含义,我会说 Raku 目前不能做的事情(尽管它可以做的更多!)。例如,“Raku”目前“不能”知道
sub f(--> Int) { 'Oops' }在编译时是无效的。我并不是说不可能为 Raku 编写静态分析器。显然不是。我并不是说 Raku 永远无法做到这一点。我的意思是,现在,it can't。 -
.@codesections 当然。虽然现在你可以写
BEGIN { f },结果是编译时错误。明确地说,我得到了,并且得到了,你曾经和现在在说什么。我的评论不是针对您个人,而是主要针对可能误解什么可以做什么和不可以做什么的后来读者。一些 PL 将永远能够授权开发人员将内容从运行时转移到编译时,但 Raku 已经做到了,而且还会有更多。正如您所说,开发人员可以编写一个静态分析器,并且正如 jnthn 所指出的,近期路线图的一部分使得将类型检查器实现为模块成为可能。
标签: string raku string-interpolation rakudo