string - perl6 "P6opaque, Str" 与简单的 "Str" 类型
问题描述
我试图从用户输入中获取一个列表,使用我通常的代码,但有时它会因为这个错误而无法预料地失败:
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
第一个。我知道你已经尝试过了。剩下的就是找出需要在哪里完成。希望这个答案能指导我们。
您只能将整数分配给整数变量
将字符串分配给 anInt
或 an是错误的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
分配给 an 的错误Int
被高级机器捕获,该机器以高级错误消息响应。因为int
它是用低级消息响应的低级机器。我们将在下面仔细研究这种差异,但就解决您的问题而言,这是一个红鲱鱼。
要解决此问题,您需要找到字符串被分配或绑定到具有原生整数类型约束的变量的位置int
,然后在分配之前使用如下内容强制:
my int $a = +'1' # Works
我知道你已经尝试过类似的方法。我不知道为什么它不起作用,因为您尚未共享导致问题的代码部分。
发现问题
必须在您的代码中直接使用本机整数(即您明确指定本机整数类型,全小写类型,如,int
等)或在您的代码使用的某些代码中。int32
uint
因此,请先搜索您的代码。
如果您仍然没有找到它,那么请分享您的代码,以便我们可以重现问题,最好是在阅读 StackOverflow 的新命名/URL 页面How to create a Minimal, Reproducible Example 之后。TIA。
红鲱鱼还是LTA?
“P6opaque, Str” 与简单的“Str” 类型
他们是一样的。P6opaque, Str
是对与 完全相同的类型的引用Str
。
什么时候在
Str
没有用户意识的情况下转换为“P6opaque, Str”?
它不是。
引用is repr
和本地表示:
P6opaque
是 Perl 6 中所有对象的默认表示。
表示是一组规则,用于表示计算机内存中的类型。
与 P6 对象相关的错误通常由P6 语言/编译器的高级“前端”处理。高级错误消息没有提及表示,因为大多数普通 P6 对象都有相同的 ( P6Opaque
),即使它们没有,表示仍然不相关。
但是这里我们正在处理一个由 MoarVM 处理的错误。
如果认为不相关,MoarVM 的错误消息不会提及该表示。例如:
my int64 $a = 2⁶³
显示MoarVM 异常,并显示有关其表示形式的类型的错误消息bigint
P6bigint
:
Cannot unbox 64 bit wide bigint into native integer
此错误消息未提及表示 ( P6bigint
)。
但是 MoarVM 对尝试将除整数以外的任何内容放入本机整数的响应是MoarVM 异常,它确实提到了表示。例如,如果您尝试分配Str
它:
This type cannot unbox to a native integer: P6opaque, Str
如果有人不了解表示,则此消息有点不透明,即LTA。但是,在删除表示消除了混淆的同时,它也删除了可能很重要的信息:
This type cannot unbox to a native integer: Str
我不相信这实际上更好和/或值得,但是如果您对此有强烈的感觉,请随时使用 LTA tag 提交有关此问题的 MoarVM 错误。
推荐阅读
- firebase - 你如何在 react native 中隐藏 uids?
- python - 如何在 azure 上的 python web 应用程序中添加 azure dev ops 作为持续开发
- plsql - 如何在 PL SQL 中将日期时间转换为字符串?
- json - 是否有用于 Camunda Rest 响应的 Java 类?
- javascript - 使用 jQuery 拖动和排序 div 并输出 html 代码
- jackson - 如何从 Json 映射异常中解开自定义 RuntimeException
- sql - XQuery 不会返回文档
- reactjs - 如何让 onClick 使用子组件
- amazon-web-services - Amazon ECS 服务配置仅返回 1 个结果,但得到 > '0'
- events - 使用 Apache Royale SDK 0.9.6 调整事件大小的问题