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

为何无法在Ballerina隔离函数内克隆Record类型参数?

无法克隆Ballerina Record参数的原因

1. 默认Record是不可变值类型

Ballerina中,未显式声明readonly=false的Record属于不可变值类型。这类类型的设计逻辑是不允许修改,所有对它的引用都是安全的——因为值本身不会被改变,因此语言没有为不可变类型提供clone()方法。你当前的参数Record r属于默认的不可变Record,自然无法调用克隆操作。

2. 隔离函数参数默认是只读权限

即使你定义的是可变Record(即声明了readonly=false的记录类型),作为隔离函数的参数时,它会被默认标记为readonly(只读权限)。而clone()是可变类型的可变方法,需要对实例拥有可变权限才能调用,只读权限下无法执行该操作。

补充:如果需要克隆的解决方案

如果业务场景确实需要克隆Record并添加到数组,需要做两步调整:

  • 定义Record时显式设置readonly=false,声明为可变类型:
    type MutableRecord record {|
        int id;
        string value;
        readonly=false;
    |};
    
  • 在隔离函数中,将参数声明为可变权限(用var关键字),之后再调用克隆:
    isolated function add(var MutableRecord r) {
        var rClone = r.clone();
        lock {
            arr.push(rClone);
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:35:02