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

如何在Julia构造函数中正确声明与使用SharedArray?

解决Julia构造函数中使用SharedArray的MethodError问题

咱们一步步拆解你代码里的问题,然后给出可行的修正方案:

错误的核心原因

  1. 变量顺序颠倒:你在创建f_valueN和f_policy时,n和m还没赋值,这会先触发未定义变量的错误,后续构造函数调用自然也会出问题。
  2. 构造函数参数不匹配:你的DDFC结构体默认构造函数只需要4个参数(n::Int64, m::Int64, f_valueN::SharedArray{Float64,2}, f_policy::SharedArray{Float64,2}),但你调用时传了6个参数(α, β,f_valueN, f_policy, n, m),Julia找不到匹配的方法,所以抛出了MethodError。另外看起来你定义的α和β目前没用到,应该是打算后续用来初始化数组?

修正后的代码

首先确保你已经启动了多进程(如果需要跨进程共享数组的话),然后调整构造函数的逻辑:

using Distributed
addprocs(2)  # 根据需求添加进程数
@everywhere using SharedArrays

@everywhere mutable struct DDFC{T <: Real}
    n::Int64
    m::Int64
    f_valueN::SharedArray{Float64,2}
    f_policy::SharedArray{Float64,2}
end

# 修正的关键字构造函数
@everywhere function DDFC(;n=2, m=3, α=0.3, β=0.5)
    # 先确定n和m的值,再创建SharedArray
    f_valueN = SharedArray{Float64,2}(n, m)
    f_policy = SharedArray{Float64,2}(n, m)
    
    # 如果你想用α和β初始化数组,可以添加这两步:
    # fill!(f_valueN, α)
    # fill!(f_policy, β)
    
    # 调用结构体的正确构造函数,注意参数顺序和类型匹配
    DDFC{typeof(α)}(n, m, f_valueN, f_policy)
end

测试调用

现在运行:

ddfc = DDFC()

就能正常创建DDFC实例了。你也可以自定义参数,比如:

ddfc_custom = DDFC(n=5, m=4, α=0.7)

额外说明

  • @everywhere宏确保结构体和函数定义在所有进程中都可用,这是使用SharedArray的必要前提。
  • 如果你的α和β是用来做其他计算(而非初始化数组),可以在构造函数里添加对应的逻辑后再创建数组。
  • 如果你不需要参数化类型T,可以简化结构体定义为mutable struct DDFC,这样构造函数里直接调用DDFC(n, m, f_valueN, f_policy)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:50:43