Julia代码技术问询:结构体构造器与特殊函数定义解析
Julia代码解析疑问解答
先贴出你提供的代码:
@with_kw struct BackTracking{TF, TI} iterations::TI = 1_000 ρ_hi::TF = 0.5 etc more varables end BackTracking{TF}(args...; kwargs...) where TF = BackTracking{TF,Int}(args...; kwargs...) function (ls::BackTracking)(α_0::Tα = real(T)(1), etc more parameters) where {T, Tα} some stuff α_0 = min(α_0, min(alphamax, ls.maxstep / norm(s, Inf))) ls(ϕ, α_0, ϕ_0, dϕ_0) end
疑问1解析
BackTracking{TF}(args...; kwargs...) where TF = BackTracking{TF,Int}(args...; kwargs...) 不是把TF和Int合并成单一类型,而是给结构体补充了一个简化构造方法:
- 原结构体
BackTracking需要两个类型参数:TF对应ρ_hi这类浮点数字段,TI对应iterations这类整数字段 - 这个定义的作用是:当你只指定第一个类型参数
TF时,自动把第二个类型参数TI固定为Int,这样你可以直接写BackTracking{Float64}(iterations=500),不用繁琐地写BackTracking{Float64, Int}(iterations=500)
疑问2解析
function (ls::BackTracking)(...) 里的第一组括号是定义结构体实例的可调用方法,不是构造器:
- 构造器是用来创建
BackTracking实例的,而这个方法是给已经创建好的实例ls添加“被调用”的能力 - 比如你先创建实例
ls = BackTracking(),之后就能直接用ls(1.0, ...)来执行这个函数里的逻辑,相当于把实例本身当成一个可执行的函数来用
内容的提问来源于stack exchange,提问作者ufghd34
相关产品推荐
相关产品推荐

