循环 @with_kw 结构
Loop over @with_kw structure
我正在使用 Parameters.jl。
假设以下 MWE:
julia> @with_kw mutable struct test
a = 5.
b = .0
...... # Plenty of parameters in structure test
z = .5
end
test
现在假设我想要一个函数,我会不时调用它来除除 z
之外的所有测试参数。我不知道如何有效地做到这一点,例如在 for
循环中。
下面的可以工作,但是如果我有很多参数的话会很长!
julia> @with_kw mutable struct test
a = 5.
b = .0
z = .5
end
julia> t = test()
julia> @unpack a, b = t
julia> a, b = a/2, b/2
julia> @pack! t = a, b
我怎样才能将大量参数除以 2 而不仅仅是 a
和 b
?
你可以这样做:
julia> setfield!.(Ref(t), 1:3, getfield.(Ref(t), 1:3) ./ 2)
3-element Vector{Float64}:
2.5
0.0
0.25
备注:
- 命名约定建议使用大写字母命名类型
- 从未使用过非类型化容器,所以这应该是
@with_kw mutable struct Test
a::Float64 = 5.
b::Float64 = .0
z::Float64 = .5
end
- 也可以通过调用
fieldcount(Test)
以编程方式获取字段数
我正在使用 Parameters.jl。
假设以下 MWE:
julia> @with_kw mutable struct test
a = 5.
b = .0
...... # Plenty of parameters in structure test
z = .5
end
test
现在假设我想要一个函数,我会不时调用它来除除 z
之外的所有测试参数。我不知道如何有效地做到这一点,例如在 for
循环中。
下面的可以工作,但是如果我有很多参数的话会很长!
julia> @with_kw mutable struct test
a = 5.
b = .0
z = .5
end
julia> t = test()
julia> @unpack a, b = t
julia> a, b = a/2, b/2
julia> @pack! t = a, b
我怎样才能将大量参数除以 2 而不仅仅是 a
和 b
?
你可以这样做:
julia> setfield!.(Ref(t), 1:3, getfield.(Ref(t), 1:3) ./ 2)
3-element Vector{Float64}:
2.5
0.0
0.25
备注:
- 命名约定建议使用大写字母命名类型
- 从未使用过非类型化容器,所以这应该是
@with_kw mutable struct Test
a::Float64 = 5.
b::Float64 = .0
z::Float64 = .5
end
- 也可以通过调用
fieldcount(Test)
以编程方式获取字段数