2012-10-08 34 views
27

[A : Manifest : WireFormat] có nghĩa là gì trong đoạn mã sau? Đó là từ com.nicta.scoobi.TextInput (có sẵn trên github). Nó không có vẻ là bất kỳ giới hạn kiểu thông thường nào.Ý nghĩa của dấu hai chấm bổ sung trong tham số lớp Scala

def fromDelimitedTextFile[A : Manifest : WireFormat] 
     (path: String, sep: String = "\t") 
     (extractFn: PartialFunction[List[String], A]) 
    : DList[A] = { 

    val lines = fromTextFile(path) 
    lines.flatMap { line => 
     val fields = line.split(sep).toList 
     if (extractFn.isDefinedAt(fields)) List(extractFn(fields)) else Nil 
    } 
    } 

Tôi có thể tìm thêm thông tin về chủ đề này ở đâu?

Trả lời

35

Đây được gọi là ngữ cảnh bị ràng buộc. Chúng là đường cú pháp cho danh sách tham số ẩn:

def meth[A : ContextBound1 : ContextBoundN](a: A) 

// ==> 

def meth[A](a: A)(implicit evidence: ContextBound1[A], ContextBoundN[A]) 

Nếu có nhiều giới hạn ngữ cảnh từ 1 đến N, tất cả đều được dịch sang cùng danh sách tham số. Xem this question để có giải thích chi tiết hơn về cách chúng hoạt động và những gì chúng hữu ích.

Để tìm các biểu tượng như vậy, thật hữu ích khi đọc StackOverflow Scala Tutorial.

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