循环 @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 而不仅仅是 ab

你可以这样做:

julia> setfield!.(Ref(t), 1:3, getfield.(Ref(t), 1:3) ./ 2)
3-element Vector{Float64}:
 2.5
 0.0
 0.25

备注:

  1. 命名约定建议使用大写字母命名类型
  2. 从未使用过非类型化容器,所以这应该是
@with_kw mutable struct Test
     a::Float64 = 5.
     b::Float64 = .0
     z::Float64 = .5
end
  1. 也可以通过调用fieldcount(Test)
  2. 以编程方式获取字段数