2017-01-17 4 views
2

Каков наилучший способ перебора полей сложного (определяемого пользователем) типа в Julia?Итерация через поля сложного типа в Julia

Допустим, я определил следующий тип и создал экземпляр:

type Foo 
    bar 
    baz::Int 
    qux::Float64 
end 
foo = Foo("Hello, world.", 23, 1.5) 

Как я могу перебирать все поля и, например, печать полей и их значения к РЕПЛ? У меня есть тип с несколькими полями, и я не хочу явно указывать каждый из них. Спасибо

ответ

5

fieldnames(foo) дает вам Vector{Symbol} для имен, и foo. опускается до getfield(foo,...). Таким образом, вы просто:

for n in fieldnames(foo) 
    println(getfield(foo,n)) 
end 

это, очевидно, не хорошо для производительности, так как логический вывод типа не может происходить здесь (тип, который вы получаете поле от зависит от величины n).

+0

Это хорошо работает. Спасибо. – miga89

0

Только для значений также

for k in 1:length(fieldnames(foo)) 
    println(getfield(foo,k)) 
end 

похоже на работу (Julia 5.1). Все еще нет вывода типа, но избегайте поиска Symbol.

Смежные вопросы