朱莉娅:打开包装风格

时间:2017-06-01 05:01:41

标签: julia

我可以打开一个元组。我试图编写一个函数(或宏),它将从类型构造函数<nav class="breadcrumb"> <a href="#">Hodddddddme</a> <a href="#">Contact</a> <a href="#">Some extra long name</a> <a href="#">Email</a> <a id="last" href="#4">Email</a> </nav> 的实例中解包这些函数的子集。也就是说,我知道该怎么做:

Parameters()

但我想做这样的事情:

a,b,c = unpack(p::Parameters)

或者甚至更懒惰:

b,c = unpack(p::Parameters, b,c)

这是为了避免写下这样的内容:

unpack(p::Parameters, b, c)

我的方法出了问题,但希望有一个解决办法。

如果我的问题的措辞不清楚,我完全无知。我在这里阅读了解压缩省略号:how-to-pass-tuple-as-function-arguments

function unpack_all_oldstyle(p::Parameters)
    a=p.a; b=p.b; c=p.c; ... z=p.z;
    return a,b,c,...,z
end

1 个答案:

答案 0 :(得分:7)

已存在一个:Parameters.jl

julia> using Parameters

julia> type Params
           a::Int64
           b::Int64
           c::Int64
       end

julia> @unpack a, c = Params(1,2,3)
Params(1,2,3)

julia> a,c
(1,3)

julia> @with_kw type Params
           a::Int64 = 3
           b::Int64 = 11
           c::Int64 = 101
       end
julia> @unpack c,b,a = Params()
Params
  a: Int64 3
  b: Int64 11
  c: Int64 101


julia> c,b,a
(101,11,3)

顺便说一句,您可以通过以下方式修复unpack_selected

unpack_selected(p::Parameters, fields...) = map(x->getfield(p, x), fields)

# note that, the selected field names should be Symbol here
julia> unpack_selected(p, :b)
(11,)

julia> unpack_selected(p, :c, :b, :a)
(101,11,3)