我可以打开一个元组。我试图编写一个函数(或宏),它将从类型构造函数<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
答案 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)