2015-05-29 2 views
6

В Джулии, я мог бы написать функцию, которая возвращает 0 если вход меньше 1, или возвращает 2, если вход больше или равен 1. Это довольно простая функция, и многословная конструкция из пяти строк if else, вероятно, чрезмерна. Поэтому я пытаюсь превратить его в однострочную функцию. Лучшее, что я могу придумать выглядит следующим образом:Тройной оператор в функции одной строки

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

или

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

Есть ли более простые способы определения этой функции?

ответ

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

Ну, этот человек действительно смотрел мне в лицо, не так ли :-) Большое спасибо –

+0

Ха-ха, никаких проблем. – spencerlyon2

2

Альтернативное решение:

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

Условный-ElseIf-другой синтаксис Юли будет возвращать значение выражения, которое запускается на выполнение, что IMHO делает тройной оператор C-подобный, а лишнее , Как и в случае, все его функции охвачены более читаемой альтернативой.

Рассматривая ваши предыдущие попытки, я думаю, стоит упомянуть, что в отличие от Python, вам редко нужно явно использовать return(). Часто вы можете просто вернуть все возвращаемые блоки if-elseif-else, как и в большинстве диалектов Lisp. Явное возвращение похоже на goto или break, что вы используете для прерывания потока управления в исключительных случаях.

Смежные вопросы