2015-05-29 17 views
6

Trong Julia, tôi có thể muốn viết một hàm trả về 0 nếu đầu vào là ít hơn 1, hoặc trả về 2 nếu đầu vào là lớn hơn hoặc bằng 1. Đây là một hàm khá đơn giản, và độ dài của một cấu trúc năm dòng if else có lẽ là quá mức. Vì vậy, tôi đang cố gắng biến nó thành một chức năng một dòng. Điều tốt nhất tôi có thể đưa ra như sau:Nhà điều hành ternary trong một chức năng một dòng

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

hoặc

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

Có cách nào đơn giản để xác định chức năng này?

Trả lời

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

Vâng, đó là một thực sự nhìn chằm chằm vào mặt tôi không phải là :-) Rất cám ơn –

+0

Haha, không sao cả. – spencerlyon2

2

giải pháp thay thế:

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

Các if-elseif-else cú pháp trong Julia sẽ trả về giá trị của biểu thức đó được thực hiện, mà IMHO làm cho các nhà điều hành ternary C-như thay thừa . Như trong, tất cả các chức năng của nó được bao gồm bởi một thay thế dễ đọc hơn.

Nhìn vào những nỗ lực trước đây của bạn, tôi nghĩ điều đáng nói là không giống như Python, bạn hiếm khi cần sử dụng return() một cách rõ ràng. Thường thì bạn chỉ có thể trả lại bất cứ thứ gì nếu các khối if-elseif-else của bạn trở lại, giống như bạn sử dụng hầu hết các phương ngữ lisp. Thu hồi rõ ràng giống như goto hoặc break, một cái gì đó mà bạn sử dụng để phá vỡ dòng điều khiển trong các trường hợp đặc biệt.

Các vấn đề liên quan