2015-05-29 36 views
6

W Julia, może chcę napisać funkcję, która zwraca 0 jeśli wejście jest mniej niż 1 lub zwraca 2 jeśli wejście jest większa lub równa 1. Jest to dość prosta funkcja, a szczegółowość pięcioliniowego konstruktu if else jest prawdopodobnie przesadna. Próbuję więc przekształcić go w funkcję jednoliniową. Najlepsze, co mogę wymyślić jest następujący:Trójskładnikowy operator w funkcji jednej linii

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

lub

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

Czy istnieją prostsze sposoby definiowania tej funkcji?

Odpowiedz

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

Cóż, ten naprawdę mnie gapił się w twarz, nie było to :-) Wielkie dzięki –

+0

Haha, nie ma problemu. – spencerlyon2

2

Alternatywa:

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

IF-ten blok else składnia Julia zwraca wartość wyrażenia zostanie wywołana, który imho sprawia, że ​​operator trójskładnikowego C-podobne, a zbędny . W tej wersji cała jego funkcjonalność jest objęta bardziej czytelną alternatywą.

Patrząc na twoje wcześniejsze próby, myślę, że warto wspomnieć, że w przeciwieństwie do Pythona, rzadko musisz jawnie używać funkcji return(). Często można po prostu zwrócić wszystkie bloki if-elseif-else, tak jak w większości selekcji. Jawny zwrot jest jak goto lub break, coś, czego używasz do przełamania kontroli w wyjątkowych przypadkach.