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

如何在Julia同类型结构体中访问构造函数内的参数值

你构造函数中传入的argument参数已经被存储在Test1结构体的第一个同名字段中,直接访问结构体实例的argument字段即可获取该值。你需要的输出效果可以通过重载默认显示方法+自定义字段取值方法实现,完整实现方案如下:

首先注意你原有代码中argFiedl()属于拼写笔误,实际应为argField(),以下是可运行的完整代码:

# 你原有依赖的Field类型和argField方法,保留你原有逻辑即可
struct Field{T}
    desc::String
    min_val::T
    max_val::T
end
function argField(arg, type, desc, max_val, min_val)
    # 此处保留你原有的argument校验逻辑
    return Field{type}(desc, min_val, max_val)
end

# 定义Test1结构体
struct Test1
    argument
    # 用下划线前缀标记为私有字段,约定不直接对外暴露
    _argumentField
    function Test1(argument)
       return new(argument, argField(argument, Float64, "this is description", 10.5, 5.5))
    end
end

# 1. 重载Base.show方法,修改实例默认输出效果
function Base.show(io::IO, t::Test1)
    print(io, "Test1($(t.argument))")
end

# 2. 定义获取内部Field的方法
# Julia原生函数调用写法:getField(test1)
getField(t::Test1) = getfield(t, :_argumentField)

# 若需要支持test1.getField()的点调用写法,额外重载getproperty即可
function Base.getproperty(t::Test1, prop::Symbol)
    if prop == :getField
        return () -> getField(t)
    end
    # 其余属性走默认获取逻辑
    return getfield(t, prop)
end

测试效果验证:

# 实例化默认输出符合预期
julia> test1 = Test1(9.5)
Test1(9.5)

# 调用getField返回内部Field对象
julia> test1.getField()
Field{Float64}("this is description", 5.5, 10.5)

# 直接访问构造函数传入的argument参数
julia> test1.argument
9.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:51:03