如何在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
相关产品推荐
相关产品推荐

