这是一个未命名的函数、结构方法(?)还是其他东西 - Julia 中的函数定义

问题描述 投票:0回答:1

我是 Julia 的新手,只是想理解以下代码块。我知道

@with_kw
来自Parameters 包,允许我们设置结构变量的默认值以及
where
关键字的用途。但我真的不明白结构声明之后发生了什么,即
BackTracking{TF}(args...; kwargs...) etc
- 我们是否修改结构体的构造函数,合并“TF,Int”类型并将它们替换为一种类型“TF”?

我也不明白下面的函数定义——第一组括号是什么意思?这个函数是该结构的另一个构造函数吗?

@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
julia
1个回答
0
投票

这条线

BackTracking{TF}(args...; kwargs...) where TF = BackTracking{TF,Int}(args...; kwargs...)

为类型

BackTracking
定义了一个新的构造函数方法。它使用短格式函数定义语法,相当于

function BackTracking{TF}(args...; kwargs...) where TF 
    return BackTracking{TF,Int}(args...; kwargs...)
end

如您所见,您只在这里提供第一个类型参数,因此实际上它表示如果您不提供第二个类型参数,它将使用

Int
作为该参数。换句话说,写
BackTracking{Float64}(...)
就相当于写
BackTracking{Float64, Int}(...)

最后一个函数定义使对象可调用。如果你创建一个对象

obj = BackTracking{Float64}(...)
,那么你可以将
obj
视为一个函数,并像

那样调用它
obj(x)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.