lis*_*tor 8 string perl6 raku p6opaque
我试图从使用常规代码的用户输入中获取列表,但是由于以下错误,有时它会意外失败:
This type cannot unbox to a native integer: P6opaque, Str
Run Code Online (Sandbox Code Playgroud)
代码行是
my @a = prompt("Enter list: ").words || (1,2,3);
Run Code Online (Sandbox Code Playgroud)
仅当我仅输入一个数字时,它才会失败。
什么时候在没有用户意识的情况下将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
Run Code Online (Sandbox Code Playgroud)
分配给的错误Int
是由高级设备捕获的,它会以高级错误消息作为响应。因为int
它是低级别的机器,它响应低级别的消息。我们将在下面仔细研究这种差异,但是就解决您的问题而言,这是一个红色的鲱鱼。
要解决此问题,您需要查找将字符串分配或绑定到具有本机整数类型约束(例如)的变量的位置,int
然后在赋值之前使用类似以下内容强制:
my int $a = +'1' # Works
Run Code Online (Sandbox Code Playgroud)
我知道您已经尝试过类似的方法。我不知道为什么它没有用,因为您尚未共享导致问题的代码部分。
必须有一些使用原生的整数,要么直接在您的代码(即你明确指定一个本地整数类型,全部小写类型一样的int
,int32
,uint
等),或在某些代码的代码使用。
因此,请先搜索您的代码。
如果您仍然找不到它,那么请分享足够的代码以使我们可以重现该问题,最好是在阅读了StackOverflow的新近命名/ URL页面“ 如何创建一个最小的,可复制的示例”之后。TIA。
“ P6opaque,Str”与简单的“ Str”类型
他们是一样的。P6opaque, Str
是对与完全相同类型的引用Str
。
何时在
Str
没有用户意识的情况下转换为“ P6opaque,Str”?
不是。
报价is repr
和本地表示:
P6opaque
是Perl 6中所有对象使用的默认表示形式。
表示是一组规则,用于表示计算机内存中的类型。
与P6对象有关的错误通常由P6语言/编译器的高级“前端”处理。高级错误消息没有提到表示形式,因为大多数普通的P6对象都具有相同的(P6Opaque
),即使它们没有表示形式,它们也将不再相关。
但是在这里,我们要处理由MoarVM处理的错误。
如果认为MoarVM的错误消息不相关,则不会提及该消息。例如:
my int64 $a = 2?³
Run Code Online (Sandbox Code Playgroud)
显示MoarVM异常,并显示有关其bigint
类型为的类型的错误消息P6bigint
:
Cannot unbox 64 bit wide bigint into native integer
Run Code Online (Sandbox Code Playgroud)
此错误消息未提及表示形式(P6bigint
)。
但是,MoarVM对尝试将非整数以外的任何内容放入本机整数的响应是MoarVM异常,它确实提到了表示形式。例如,如果您尝试分配一个,则为Str
:
This type cannot unbox to a native integer: P6opaque, Str
Run Code Online (Sandbox Code Playgroud)
如果某人不了解表示形式,则此消息有点不透明,也称为LTA。但是,尽管删除表示形式可以消除混乱,但同时也可以删除可能很重要的信息:
This type cannot unbox to a native integer: Str
Run Code Online (Sandbox Code Playgroud)
我不认为这实际上是更好和/或值得的,但是如果您对此有强烈的兴趣,请随时使用LTA标签提交有关MoarVM的错误。
归档时间: |
|
查看次数: |
110 次 |
最近记录: |