2014-06-09 15 views
5

Các mũi tên kép thể hiện trong kiểu trả về của hàm cuối cùng ở đây là gì?Mục đích của hai mũi tên trong định nghĩa người dùng selectStepFunction() trong Swift là gì?

Chúng được sử dụng để chỉ ra hai giá trị trả về khác nhau?

Nếu vậy, làm thế nào để bạn biết thứ tự các mũi tên trong đó, nếu các chức năng trong chooseStepFunction() là các loại khác nhau? Ví dụ, nếu stepForward() trở một Thông Báo String

func stepForward(input: Int) -> Int{ 
    return input + 1 
} 

func stepBackward(input: Int) -> Int{ 
    return input - 1 
} 

func chooseStepFunction(backwards: Bool) -> (Int) -> Int{ 
    return backwards ? stepBackward: stepForward 
} 

Trả lời

9

Given:

(x) -> (y) -> z 

Bạn sẽ đọc như:

Một chức năng mà chấp nhận x và trả về một chức năng mà chấp nhận y và trả z .

Vì vậy, trong trường hợp này, chooseStepFunction là hàm có hàm bool và trả về hàm nhận int và trả về một hàm int. Đây là phải kết hợp, vì vậy bạn sẽ đọc nó như:

(backwards: Bool) -> ((Int) -> Int) 

Đó là dễ nhất để đọc nếu bạn nhớ rằng tập đầu tiên của dấu ngoặc đơn (khoảng Bool) không phải là đặc biệt đặc biệt. Họ giống như tập thứ hai (khoảng Int). (Các dấu ngoặc đơn không thực sự cần thiết (Int) -> Int cũng giống như Int -> Int..)

Nhận thấy điều này sẽ giúp khi bạn gặp tách lạng bộ:

func addTwoNumbers(a: Int)(b: Int) -> Int 

Đây thực sự là giống như:

(a: Int) -> (b: Int) -> Int 

Một hàm lấy một int và trả về một hàm nhận int và trả về một int.

+0

Khả năng kết hợp phù hợp có thể là điều khiến cho điều này có vẻ lạ, nhưng nó cho phép bạn tránh được các dấu ngoặc đơn phụ. Có hay không đó là một điều tốt ... –

+0

Toán tử "trả về" là kết hợp đúng trong mọi ngôn ngữ tôi đã gặp phải. Nó sẽ khá bất tiện nếu nó được liên kết trái. –

+0

Đủ công bằng; Tôi thừa nhận nó không phải là một nhà điều hành tôi quen thuộc với. –

1

rằng nó trả lại một chức năng. Vì vậy, chooseStepFunction mất một bool và trả về một hàm. Chữ ký loại của hàm là (Int)->Int.

Mũi tên biểu thị một hàm có thông số đầu vào ở bên trái và đầu ra ở bên phải.

2

Các -> (Int) -> Int trong

func chooseStepFunction(backwards: Bool) -> (Int) -> Int{ 
return backwards ? stepBackward: stepForward 
} 

có nghĩa là hàm trả về một chức năng mà phải mất một Int như một tham số, và cũng có thể trả về một Int.

Bạn có thể xem nó như là func chooseStepFunction(backwards: Bool) -> [ (Int) -> Int ] {

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