2012-09-28 36 views
9

nghĩa là gì dưới đây khai scala:nghĩa là gì 'MyType = Int => Boolean'

type MyType = Int => Boolean 

Đây là hiểu biết của tôi:

Tôi tuyên bố một loại mới 'MyType' nhưng có nghĩa là gì chức năng bậc cao 'Int => Boolean'

+1

Lưu ý rằng 'Int => Boolean' là _not_ một hàm bậc cao (thậm chí không nếu đoạn bắt nguồn từ [Coursera của] (http://www.coursera.org/course/progfun) "Tuần 2: Chức năng Đặt hàng Cao cấp" ;-)) – netzwerg

+0

@netzwerg vâng, có vẻ như việc tìm kiếm ngay cả những thứ 'đơn giản' cũng khó khăn. – user701254

+1

Đừng lo lắng, điều này thực sự đơn giản: Các hàm bậc cao hơn là các hàm có chức năng khác như tham số đầu vào của chúng, hoặc trả về/xuất một hàm khác ([Wikipedia] (http://en.wikipedia.org/wiki/Higher -order_function)) – netzwerg

Trả lời

14

Nó không quá nhiều tuyên bố một mới loại như tuyên bố một loại mới alias. Chúng vẫn là cùng loại: nhưng bí danh cho phép bạn viết nó ngắn gọn hơn một chút.

Int => Boolean là loại hàm nhận một đối số, một Int và trả về Boolean.

Ví dụ, một chức năng như "lớn hơn 5" có thể có loại Int => Boolean:

type MyType = Int => Boolean 
val greaterThan5: MyType = (x: Int) => x > 5 
greaterThan5(7) // true 
3

Bạn là chính xác, các biên dịch sau:

type MyType = Int => Boolean 
def positive(x: Int) = x > 0 
val fun: MyType = positive 
fun(42) //yields true 

Ở đây bạn khai báo kiểu bí danh nói rằng MyType tương đương với hàm lấy Int và trả lại Boolean. Sau đó, bạn tạo một phương thức khớp với khai báo như vậy. Cuối cùng, bạn gán phương thức này cho biến số MyType. Nó biên dịch và hoạt động tốt.

Lưu ý rằng đây chỉ là một alias, không phải là một loại mới:

trait MyType2 extends (Int => Boolean) 
val fun2: MyType2 = positive _ 
error: type mismatch; 
found : Int => Boolean 
required: MyType2 
     val fun2: MyType2 = positive _ 
         ^
Các vấn đề liên quan