2015-05-29 30 views
6

içinde üçlü operatör, I girişi daha az 1, ya da giriş ya da daha büyük 1 eşit ise 2 dönerse 0 döndüren bir işlevi yazmak gerekebilir. Bu oldukça basit bir işlevdir ve beş satırlık if else yapısının büyüklüğü muhtemelen aşırıdır. Bu yüzden tek satırlık bir işleve dönüştürmeye çalışıyorum.Julia bir tek çizgi fonksiyonu

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

veya

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

bu fonksiyonu tanımlamak için herhangi bir basit yolları var mı şu şekildedir: Ben elde edebilirsiniz en iyisi?

cevap

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

Eh, bu gerçekten bana yüze bakıyordu gerçekten değildi :-) Çok teşekkürler –

+0

Haha, sorun değil. – spencerlyon2

2

alternatif çözüm:

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

if-elseif-başka imho C-benzeri üçlü operatör yerine gereksiz hale işletilirse ekspresyonu değerini döndürür Julia sözdizimi . İçinde olduğu gibi, tüm işlevselliği daha okunabilir bir alternatif tarafından kapsanmaktadır.

Önceki girişimlerinize baktığımda, Python'dan farklı olarak, nadiren return() işlevini kullanmanızın nadiren gerekmediğini belirtmek gerekir. Çoğunlukla, eğer lis-axif lehçelerinizde olduğu gibi, if-elseif-else blokları ne olursa olsun geri döndürebilirsiniz. Açık dönüş, istisnai durumlarda kontrol akışını kırmak için kullandığınız bir şey ya da mola gibidir.