gpt4 book ai didi

raku - 有没有一种方法可以安全地重新声明符号?

转载 作者:行者123 更新时间:2023-12-04 03:41:53 25 4
gpt4 key购买 nike

我经常发现自己在REPL中进行实验,并且会说类似以下内容:
subset Bar of Int where * %% 57;
然后,我在Bar -ness上检查了一下内容。

一切都很高兴,直到我意识到我想更改Bar的定义。

如果我只是重新定义Bar,则会收到Redeclaration of symbol异常。

我尝试像这样使用MONKEY-TYPINGaugment:

use MONKEY-TYPING;
augment subset Bar of Int where * %% 37;

但这使我犯了同样的错误。

我为什么要这个?因此,我可以迭代我的子集(或类或其他符号)的定义,同时重用我已经键入的历史记录中的测试。

最佳答案

我认为REPL通过EVAL-将每个新输入放入新的嵌套词法作用域中来发挥其不可思议的作用。因此,如果您使用my声明事物,则可以使用稍后输入的声明来遮盖它们:

my subset Bar of Int where * %% 57;
sub take-Bar(Bar $n) { say "$n is Bar" }
take-Bar 57;

my subset Bar of Int where * %% 42;
sub take-Bar(Bar $n) { say "$n is Bar" }
take-Bar 42;

如果您省略 my,那么对于 subsetclass声明,将使用 our,并且由于 our实际上是 my +将符号添加到封装中...;原来,如果您从包装中删除了该符号,则可以在以后再次对其进行阴影处理:
subset Bar of Int where * %% 57;
GLOBAL::<Bar>:delete;
subset Bar of Int where * %% 42;
42 ~~ Bar;

注意:这些结果仅来自我在REPL中的实验。我不确定是否还有其他未知的副作用。

关于raku - 有没有一种方法可以安全地重新声明符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58884592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com