gpt4 book ai didi

raku - "Invocant of method '使用赋值运算符时的ASSIGN-KEY ' must be an object instance"

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

带有键入键的哈希...

use v6;
class Foo {}
my Hash[Foo, Foo] $MAP;

my $f1 = Foo.new;
my $f2 = Foo.new;

$MAP{$f1} = $f2;

产生错误:

Invocant of method 'ASSIGN-KEY' must be an object instance of type 'Hash[Foo,Foo]', not a type object of type 'Hash[Foo,Foo]'. Did you forget a '.new'?



我发现它具有误导性;什么是真正的错误,我必须写些什么?

我已经为哈希变量尝试了 %标记,但这也不起作用。

最佳答案

用您定义它的方式,$MAP实际上是一个角色。您需要实例化(实际上是pun):

class Foo {}
my Hash[Foo, Foo] $MAP;

my $map = $MAP.new;

my $f1 = Foo.new;
my $f2 = Foo.new;

$map{$f1} = $f2;
say $map;

死掉的礼物是 classes can't be parametrized角色。

还:
say $MAP.DEFINITE; # False
say $map.DEFINITE; # True

但是实际上错误消息是非常有用的,直到并包括使用 .new的建议,就像我在这里所做的那样。

我们可以将其缩短为:
class Foo {}
my %map = Hash[Foo, Foo].new ;
%map{Foo.new} = Foo.new;
%map.say;

通过从定义中进行修剪,我们不需要$ MAP中间类。

关于raku - "Invocant of method '使用赋值运算符时的ASSIGN-KEY ' must be an object instance",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60360779/

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