2017-03-14 27 views
7

A/a case, chứ không phải case case.Khi nào là trường hợp có ý nghĩa cú pháp?

Rõ ràng case a phù hợp với bất cứ điều gì và liên kết nó với tên a, trong khi case A tìm kiếm một biến A và phù hợp với bất cứ điều gì == coi bằng A. Điều này đến như là một bất ngờ đối với tôi; trong khi tôi biết Scala là trường hợp nhạy cảm, tôi không bao giờ mong đợi trường hợp nhận dạng để ảnh hưởng đến các quy tắc phân tích cú pháp.

Có phải thông thường đối với cú pháp của Scala để quan tâm đến trường hợp nhận dạng hoặc chỉ có một số ít bối cảnh trong đó điều này xảy ra? Nếu chỉ có một số ít bối cảnh như vậy, chúng là gì? Tôi không thể tìm thấy bất kỳ thứ gì trên Google; tất cả những gì tôi nhận được là kết quả về sự khớp mẫu.

+1

Thực ra, tôi tin đó là câu hỏi duy nhất, nhưng tôi sẽ để lại lời giải đáp cho người biết rõ hơn về tôi. –

+0

Tôi nghĩ bạn đang tìm [* mẫu định danh ổn định *] (http://www.scala-lang.org/files/archive/spec/2.12/08-pattern-matching.html#stable-identifier-patterns) – Bergi

+1

@ Bergi: Tôi thực sự đã liên kết điều đó trong câu hỏi, mặc dù với cái chết của liên kết gạch chân, nó có thể khó để nhận thấy. – user2357112

Trả lời

4

Có một tính năng tương tự trong tự nhiên, được gọi là type pattern. Trong mẫu kiểu, một số nhận dạng đơn giản bắt đầu bằng chữ cái thường là một loại biến số và tất cả những người khác đang cố gắng so khớp các loại thực tế (trừ _).

Ví dụ:

val a: Any = List(1, 2, 3) 
val c = 1 

// z is a type variable 
a match { case b: List[z] => a } 

// Type match on `Int` 
a match { case b: List[Int] => a } 

// type match on the singleton c.type (not a simple lower case identifier) 
// (doesn't actually compile because c.type will never conform) 
a match { case b: List[c.type] => a } 

Loại khớp như ví dụ đầu tiên là ít được biết đến bởi vì, tốt, nó hầu như không được sử dụng.

+0

[Ở đây] (http://stackoverflow.com/a/7318089/2292812) là một ví dụ hay về các biến kiểu đang hoạt động. –

+0

Tôi đã thực sự hy vọng sẽ không có nhiều ví dụ hơn, nhưng ít nhất hai ví dụ theo một mẫu nhất quán. Bạn có biết nếu đó là những ví dụ duy nhất, như của 2,12? (Không chấp nhận vì tôi không muốn khuyến khích thêm câu trả lời hoặc ghim điều này lên đầu, đặc biệt nếu thay đổi ngôn ngữ và thêm ý nghĩa của trường hợp.) – user2357112

+0

@ user2357112 Tôi chỉ có thể nói chắc chắn 99,99%, vì ai biết nếu họ một số lỗi lạ không ai từng chạy vào, nhưng hai trường hợp tương tự này là những trường hợp duy nhất được đề cập trong spec. Tôi muốn được quan tâm để xem nếu có ai đến với cái gì khác, mặc dù. –

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