julia数组中的三个点(…)是做什么的?他们为什么要更改类型签名?

julia数组中的三个点(…)是做什么的?他们为什么要更改类型签名?,julia,Julia,给定下面的数据类型,下面的理解将产生两个Players的Array{Any,1}: [[team.players for team in [big_team_1, big_team_2]]] 然而,接下来的理解将产生12个元素的数组{Player,1}的期望结果: [[team.players for team in [big_team_1, big_team_2]]...] …到底在做什么?这在哪里有记录 数据: args…和;kwargs…是splat运算符,如果您了解Python,它

给定下面的数据类型,下面的理解将产生两个
Player
s的
Array{Any,1}

[[team.players for team in [big_team_1, big_team_2]]]
然而,接下来的理解将产生12个元素的
数组{Player,1}
的期望结果:

[[team.players for team in [big_team_1, big_team_2]]...]
到底在做什么?这在哪里有记录


数据:


args…
;kwargs…
是splat运算符,如果您了解Python,它与
*args
**kwargs
相同:

您可以在此处找到文档:

在方法签名中时(收集参数)。
julia>函数foo(pos_1,pos_2,opt_1=:opt_1,args。。。;
opt_kw1=:opt_kw1,opt_kw2=:opt_kw2,kwargs…)
[pos_1,pos_2,opt_1,args,opt_kw1,opt_kw2,(kwargs,);]
结束
foo(具有2个方法的通用函数)
此签名意味着:

  • pos_1
    是第一个必需的位置参数
  • pos_2
    是第二个必需的位置参数
  • opt_1
    是一个可选的位置参数
  • args…
    是收集在元组中的以下所有位置参数
请注意分号如何
将位置参数与关键字参数分开(顺序在关键字参数中不重要):

  • opt_kw1
    是可选的关键字参数
  • opt_kw2
    是一个可选的关键字参数
  • kwargs…
    是在元组(键、值)对数组中收集的以下所有关键字参数

julia>方法(foo)
#通用函数“foo”的2种方法:
无处的foo(位置1,位置2):3
无处的foo(位置1、位置2、选项1、参数…):3
foo
可以这样称呼:

所需参数:
julia>foo(:pos_1,:pos_2)
七元素数组{Any,1}:
:pos_1#提供的值
:pos_2#提供的值
:opt_1#默认值
()#空元组
:opt_kw1#默认值
:opt_kw2#默认值
(任何[],)#没有夸尔格
可选的位置参数和关键字参数:
julia>foo(:pos_1,:pos_2,:OPT_1,:a,:b,:c,
opt_kw2=:opt_kw2,kwarg1=true,opt_kw1=:opt_kw1,kwarg2=false)
七元素数组{Any,1}:
:位置1
:位置2
:OPT_1
(:a,:b,:c)
:OPT_KW1
:OPT_KW2
(任何[(:kwarg1,真),(:kwarg2,假)],)
注意关键字参数中的顺序是如何不相关的,分号也是如此


在函数调用中时(扩展参数)。 对位置参数使用集合,对关键字参数使用带有符号键的关联集合:

julia>x,y,z=1,2,3;
julia>求和(x,y,z)
错误:MethodError:`sum`没有与sum匹配的方法(::Int64,::Int64,::Int64)
最接近的候选人是:
sum(::Union{Base.Func{1},Function},::AbstractArray{T,N},::Any)
sum(::Union{Base.Func{1},数据类型,函数},::Any)
总和(::位数组{N},::任意)
...
朱莉娅>求和
sum(具有12种方法的通用函数)
julia>Base.sum(args…)=sum(args)
sum(具有13种方法的通用函数)
julia>求和(x,y,z)
6.
julia>foo(x,y,z)=和(x,y,z)
foo(具有1个方法的泛型函数)
julia>foo(x,y,z)
6.
julia>foo([x,y,z])
错误:MethodError:`foo`没有与foo匹配的方法(::数组{Int64,1})
最接近的候选人是:
foo(::Any,::Any,::Any)
julia>foo([x,y,z]…)
6.

julia>foo(;x=0,y=0,z=0)=和(x,y,z)
foo(具有2个方法的通用函数)
朱莉娅>福()
0
julia>foo(z=3,x=1,y=2)
6.
julia>foo(;Dict(:z=>3,:y=>2,:x=>1))
错误:TypeError:anonymous:在typeassert中,应为符号,获取对{Symbol,Int64}
匿名无文件
julia>foo(;Dict(:z=>3,:y=>2,:x=>1)…)
6.
type Player
  ranking::Int
end

type Team
  players::Array{Player}
end

team_1 = Team([Player(10_000), Player(11_000), Player(9_000), Player(8_500),
                   Player(20_000), Player(10_500)])

team_2 = Team([Player(i.ranking + 3000) for i in team_1.players])