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])