2011-12-25 24 views
6

Tại sao điều này không biên dịch:Scala phương pháp và đánh giá cao tên

scala> val a? = true 
<console>:1: error: illegal start of simple pattern 
    val a? = true 
     ^

và các công trình này?

scala> val a_? = true 
a_?: Boolean = true 
+3

Xem http://stackoverflow.com/a/7657692/257449 – huynhjl

Trả lời

6

Theo đặc tả ngôn ngữ Scala (nhìn vào 2.8, nghi ngờ mọi thứ đã thay đổi nhiều kể từ):

idrest :: = {thư | digit} [`_ 'op]

Nghĩa là, số nhận dạng có thể bắt đầu bằng chữ cái hoặc chữ số, theo sau là ký tự gạch dưới và các ký tự toán tử khác. Điều đó làm cho số nhận dạng chẳng hạn như [email protected]! số nhận dạng hợp lệ. Ngoài ra, lưu ý rằng số nhận dạng cũng có thể chứa một chuỗi ký tự toán tử. Xem xét phiên REPL sau:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_16). 

scala> val +aff = true 
<console>:1: error: illegal start of simple pattern 
val +aff = true 
^ 

scala> val ??? = true 
???: Boolean = true 

scala> val [email protected]! = true 
[email protected]!: Boolean = true 

scala> val %^@%@ = true 
%^@%@: Boolean = true 

scala> val ^&*!%@ = 42 
^&*!%@: Int = 42 

Hy vọng điều này sẽ trả lời câu hỏi của bạn.

2

Ngữ pháp của Scala cho số nhận dạng được xác định theo cách như vậy. ? được định nghĩa là một ký tự toán tử. Và số nhận dạng phải tuân theo các quy tắc sau: phải là một chữ thường có thể được theo sau bởi một phần tử của danh mục cú pháp 'idrest', được định nghĩa là 'chữ cái hoặc chữ số, có thể theo sau là _ và một từ khóa op . ' Xem Scala Language Specification để biết thêm chi tiết.

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