2015-05-29 12 views
6

In Julia, potrei voler scrivere una funzione che restituisce 0 se l'input è inferiore a 1 o restituisce 2 se l'input è maggiore o uguale a 1. Questa è una funzione piuttosto semplice e la prolissità di un costrutto if else a cinque righe è probabilmente eccessiva. Quindi sto cercando di trasformarlo in una funzione a una riga. Il meglio che posso venire con è la seguente:L'operatore ternario in una funzione a linea singola

f(x::Number) = begin (x < 1) && return(0); return(2); end 

o

f(x::Number) = begin x < 1 ? (y=0) : (y=2); return(y); end 

ci sono modi più semplici per definire questa funzione?

risposta

10
julia> f(x::Number) = x < 1 ? 0 : 2 
f (generic function with 1 method) 

julia> f(0) 
0 

julia> f(1) 
2 

julia> f(0.99) 
0 
+0

Beh, quello mi stava davvero fissando in faccia non lo era :-) Molte grazie –

+0

Haha, nessun problema. – spencerlyon2

2

Soluzione alternativa:

f(x::Number) = if (x < 1) 0 else 2 end 

Il se-elseif-else sintassi nel Julia restituirà il valore dell'espressione che viene eseguito, che imho rende l'operatore ternario C-like piuttosto superfluo . Come in, tutte le sue funzionalità sono racchiuse in un'alternativa più leggibile.

Guardando i tuoi precedenti tentativi, penso che valga la pena ricordare che, diversamente da dire in Python, raramente hai bisogno di usare esplicitamente return(). Spesso puoi restituire qualsiasi cosa restituisca i tuoi blocchi if else else, proprio come faresti nella maggior parte dei dialoghi lisp. Il ritorno esplicito è come goto o break, qualcosa che si usa per interrompere il flusso di controllo in casi eccezionali.

Problemi correlati