gpt4 book ai didi

string - perl6 "P6opaque, Str"与简单的 "Str"类型

转载 作者:行者123 更新时间:2023-12-04 08:01:45 24 4
gpt4 key购买 nike

我试图从用户输入中获取一个列表,使用我通常的代码,但有时它会因为这个错误而无法预料地失败:

This type cannot unbox to a native integer: P6opaque, Str
代码行是
my @a = prompt("Enter list: ").words || (1,2,3);
只有当我只输入一个数字时它才会失败。
什么时候在没有用户意识的情况下将 Str 转换为“P6opaque, Str”?我不能使用 +@a[0] 或 @a[0].Int 将此“P6opaque, Str”转换为 Int。我在这里想念什么?

最佳答案

TL;DR P6Opaque的提及主要是一条红鲱鱼。一些代码试图将字符串分配给 int .您需要将其强制为 Int第一的。我知道你已经尝试过了。剩下的就是找出需要在哪里完成。希望这个答案能指导我们。

您只能将整数分配给整数变量

将字符串分配给 Int 是错误的或 int :

my Int $a = '1'; # Type check failed ... expected Int but got Str
my int $a = '1'; # This type cannot unbox to a native integer: P6opaque, Str

分配给 Int 的错误被高级机器捕获,该机器以高级错误消息响应。对于 int它是低级机器,以低级消息响应。我们将在下面仔细研究这种差异,但就解决您的问题而言,这是一个红鲱鱼。

要解决此问题,您需要找到字符串被分配或绑定(bind)到具有 native 整数类型约束(如 int)的变量的位置。然后在分配之前用这样的东西强制:
my int $a = +'1' # Works

我知道你已经尝试过类似的方法。我不知道为什么它不起作用,因为您尚未共享导致问题的代码部分。

发现问题

必须在您的代码中直接使用 native 整数(即您明确指定 native 整数类型,全小写类型,如 intint32uint 等)或在某些代码中您的代码用途。

因此,请先搜索您的代码。

如果您仍然没有找到它,请分享您的代码以便我们可以重现该问题,最好是在阅读 StackOverflow 的新命名/URL 页面 How to create a Minimal, Reproducible Example 之后. TIA。

红鲱鱼还是LTA?

“P6opaque, Str” vs simple “Str” types



他们是一样的。 P6opaque, Str是对与 Str 完全相同的类型的引用.

When is a Str converted to "P6opaque, Str" without user awareness?



它不是。

报价 is repr and native representations :

P6opaque is the default representation used for all objects in Perl 6.



表示是一组规则,用于表示计算机内存中的类型。

与 P6 对象相关的错误通常由 P6 语言/编译器的高级“前端”处理。高级错误消息没有提及表示,因为大多数普通 P6 对象具有相同的表示 ( P6Opaque),即使它们不提及,表示仍然不相关。

但是这里我们正在处理一个由 MoarVM 处理的错误。

如果认为不相关,MoarVM 的错误消息不会提及该表示。例如:
my int64  $a = 2⁶³

显示 a MoarVM exception with an error message about the bigint type whose representation is P6bigint :
Cannot unbox 64 bit wide bigint into native integer

此错误消息未提及表示 ( P6bigint)。

但是 MoarVM 对尝试将除整数以外的任何内容放入 native 整数的响应是 a MoarVM exception其中确实提到了代表。例如,如果您尝试分配 Str它的:
This type cannot unbox to a native integer: P6opaque, Str

如果有人不了解表示,则此消息有点不透明,即 LTA .但是,在删除表示消除了混淆的同时,它也删除了可能很重要的信息:
This type cannot unbox to a native integer: Str

我不相信这实际上更好和/或值得,但如果你对此有强烈的感觉,请随时 file a MoarVM bug about this with an LTA tag .

关于string - perl6 "P6opaque, Str"与简单的 "Str"类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030780/

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