2012-02-25 34 views
63

tôi thấy đoạn mã sau:Từ khóa forSome trong Scala là gì?

List[T] forSome { type T } 

Các forSome trông giống như một phương pháp, nhưng người bạn của tôi nói với tôi đó là một từ khóa.

Tôi googled nó, nhưng tìm thấy vài tài liệu về forSome. Điều đó có nghĩa là gì và tôi có thể lấy một số tài liệu về nó ở đâu?

Trả lời

43

Từ khóa forSome được sử dụng để xác định loại hiện có trong Scala. Có trang Scala glossary giải thích chúng là gì. Tôi không thể tìm thấy một địa điểm trong tài liệu Scala giải thích chúng chi tiết, vì vậy here là một bài viết trên blog mà tôi tìm thấy trên Google giải thích cách chúng hữu ích.

Cập nhật: bạn có thể tìm định nghĩa chính xác về các loại hiện có trong số Scala specification nhưng nó khá dày đặc.

Để tóm tắt một số bài đăng mà tôi liên kết đến, các loại tồn tại hữu ích khi bạn muốn thao tác trên một thứ gì đó nhưng không quan tâm đến chi tiết của loại trong đó. Ví dụ, bạn muốn hoạt động trên các mảng nhưng không quan tâm loại của mảng:

def printFirst(x : Array[T] forSome {type T}) = println(x(0)) 

mà bạn cũng có thể làm với một kiểu biến trên phương pháp:

def printFirst[T](x : Array[T]) = println(x(0)) 

nhưng bạn có thể không muốn thêm biến kiểu trong một số trường hợp. Bạn cũng có thể thêm một ràng buộc vào biến loại:

def addToFirst(x : Array[T] forSome {type T <: Integer}) = x(0) + 1 

Cũng xem ví dụ này this blog post.

+0

@JanekBogucki Liên kết trên không hoạt động. – jpcooper

+0

http://www.scala-lang.org/news/roadmap-next.html - "forSome cú pháp bị loại bỏ". –

+0

forSome dự kiến ​​sẽ bị xóa trong bản phát hành "Don Giovanni": https://www.scala-lang.org/news/roadmap-next.html –

3

Tôi không biết Scala, nhưng câu hỏi của bạn đã thu hút sự quan tâm của tôi và bắt đầu Googling.

tôi thấy rằng trong Scala's changelog:.

"Nó bây giờ có thể xác định các loại hiện sinh bằng cách sử dụng từ khóa mới forSome Một loại hiện sinh có dạng T forSome {Q} nơi Q là một chuỗi giá trị và/hoặc loại khai báo. "

+5

Một số thông tin có thể được tìm thấy trong [Scala Spec] (http://www.scala-lang.org/docu/files/ScalaReference.pdf), trên trang 26 –

+1

thông số hiện tại: http: //www.scala -lang.org/files/archive/spec/2.11/03-types.html#existential-types –

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