gpt4 book ai didi

introspection - 我可以自省(introspection)一个变量以直接发现它是用什么子集声明的吗?

转载 作者:行者123 更新时间:2023-12-01 00:33:08 26 4
gpt4 key购买 nike

有没有办法自省(introspection)变量以直接找出它声明的子集?在这里,我创建了一个子集,但自省(introspection)将我指向它的基本类型:

> subset Prime of Int where .is-prime
(Prime)
> my Prime $x = 23
23
> $x.WHICH
Int|23

我知道它必须将信息存储在某处,因为如果我尝试重新分配与子集不匹配的值,它将失败:
> $x = 24
Type check failed in assignment to $x; expected Prime but got Int (24)
in block <unit> at <unknown file> line 1

我尝试搜索代码,但很快就进入了 container.c 之类的文件。和 perl6_ops.c C 代码让我眼前一亮。我以为 X::TypeCheck::Assignment可能有帮助(见 core/Exception.pm ),但我不清楚 expected 的位置值(value)来自于。 (另见 this commit)

我觉得我错过了一些明显的东西。

我可以检查某些内容是否与子集匹配,但这并不能告诉我它是否是用特定子集声明的:
> my Int $y = 43;
43
> $y ~~ Prime;
True

我正在使用 Rakudo Star 2017.01

受 Zoffix 在 a recent post 中使用子集的启发.

最佳答案

您存储在 $x 中的值是 Int .容器(您输入到 Prime )是可以接受的,因为 PrimeInt 的子类型.

所以你感兴趣的,不是容器中的值,而是容器的类型。为了获得容器,Perl 6 有 .VAR方法。这有一个 .of method获取类型:

$ 6 'subset Prime of Int where .is-prime; my Prime $x; dd $x.VAR.of'
Prime

关于introspection - 我可以自省(introspection)一个变量以直接发现它是用什么子集声明的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43231775/

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