Перебрать структуру @with_kw

Я использую Параметры.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

Как я могу сделать это с большим количеством параметров, которые нужно разделить на два, а не только a и b?

Сила классов Java: сравнение с языком C
Сила классов Java: сравнение с языком C
Абстракция" - это процесс упрощения сложных сущностей или концепций реального мира с целью их применения в форме программирования. В Java класс...
2
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ты можешь сделать:

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)

Другие вопросы по теме