2014-04-04 3 views

risposta

23

Utilizzando l'esempio di Nanashi, l'indizio è l'errore quando si chiama f(g())

julia> g() = (1, 2, 3) 
g (generic function with 1 method) 

julia> f(a, b, c) = +(a, b, c) 
f (generic function with 1 method) 

julia> g() 
(1,2,3) 

julia> f(g()) 
ERROR: no method f((Int64,Int64,Int64)) 

Ciò indica che questo dà la tupla (1, 2, 3) come input per f senza disimballo. Per decomprimerlo usa un'ellissi.

julia> f(g()...) 
6 

Il relativo capitolo nel manuale di Julia è qui: http://julia.readthedocs.org/en/latest/manual/functions/#varargs-functions

+0

non ha ancora sapere tuple potrebbero essere Splatted, grazie! – AJcodez

+1

Preferisco 'f (g() ...)' su 'apply', e penso che il primo sia più idiomatico in Julia. –

+0

@AJcodez: è possibile rimuovere la mia risposta come accettata e contrassegnarla come risposta? Credo che sia comunque meglio. – Manhattan

4

Usa apply.

julia> g() = (1,2,3) 
g (generic function with 1 method) 

julia> f(a,b,c) = +(a,b,c) 
f (generic function with 1 method) 

julia> apply(f,g()) 
6 

Facci sapere se questo è utile.