You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Perl6哈希的数组类型键中添加元素?

解决Perl6中哈希数组键无法添加元素的问题

嘿,这个问题我之前也踩过坑!核心原因是你给哈希键赋值的是不可变的List,而push/append这些方法只能作用在**可变的Array(数组)**上。

为什么原来的代码报错?

在Perl6里,用逗号分隔的值(比如'Seattle', 'Madison')默认会创建一个List类型,它是只读的,不能被修改。所以当你执行%c<USA> = 'Seattle', ...后,%c<USA>存储的是一个List,调用push或append自然会提示“Cannot call on an immutable List”。

正确的解决方法

有两种常用的方式来处理:

1. 初始化时直接赋值为Array

你可以用方括号[]包裹元素,或者显式调用Array.new()来创建可变数组:

my %c;
# 简洁写法:用[]创建Array
%c<USA> = ['Seattle', 'Madison', 'Bozeman', 'Portland'];
# 或者显式声明Array
%c<USA> = Array.new('Seattle', 'Madison', 'Bozeman', 'Portland');

# 现在push/append都能正常工作了
%c<USA>.push('Philadelphia');
# 或者用append
%c<USA>.append('Philadelphia');

2. 利用自动 vivification 直接push

Perl6支持自动生成容器的特性——当你对一个不存在的哈希键调用push时,它会自动把这个键的值初始化为Array。所以你甚至可以跳过手动初始化的步骤:

my %c;
# 第一次push会自动创建Array并添加元素
%c<USA>.push('Seattle', 'Madison', 'Bozeman', 'Portland');
# 继续添加新元素
%c<USA>.push('Philadelphia');

验证结果

执行完上面的代码后,你可以打印%c<USA>看看结果:

say %c<USA>; # 输出:[Seattle Madison Bozeman Portland Philadelphia]

内容的提问来源于stack exchange,提问作者con

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:29:31