2012-05-29 33 views
10

tôi chỉ tìm thấy một số mã scala trong đó có một tên lớp lạ: TênCác tên lớp và phương thức mát được bọc trong ``: class `Đây là một lớp học tuyệt vời` {}?

class `This is a cool class` {} 

và phương pháp:

def `cool method` = {} 

Chúng ta có thể sử dụng một câu cho một lớp hoặc phương pháp tên!

Nó rất mát mẻ và hữu ích cho đơn vị thử nghiệm:

class UserTest { 
    def `user can be saved to db` { 
     // testing 
    } 
} 

Nhưng tại sao chúng ta có thể làm được điều này? Làm thế nào để hiểu nó?

Trả lời

15

Tính năng này tồn tại vì lợi ích của khả năng tương tác. Nếu Scala có một từ dành riêng (ví dụ: with), thì bạn vẫn có thể tham khảo mã từ các ngôn ngữ khác sử dụng nó làm phương thức hoặc biến hoặc bất kỳ thứ gì, bằng cách sử dụng các dấu gạch chéo ngược.

Vì không có lý do gì để cấm gần như chuỗi tùy ý, bạn có thể sử dụng gần như chuỗi tùy ý.

+2

+1 vì đã đưa ra lý do * về lý do tại sao các dấu gạch chéo ở đó. – Frank

+0

Tôi có cảm giác rằng trường hợp sử dụng OP cũng có thể được xem xét, nếu không chỉ một biểu tượng duy nhất là cần thiết để biểu thị mã định danh được trích dẫn giống như cách C# thực hiện –

+0

@jk. - Chỉ khi việc lén lút của Scala hoạt động giống như mọi người khác. Đặc tả JVM cho phép hầu hết mọi thứ như một tên phương thức. Tôi không chắc liệu Scala có đủ thông minh để kiểm tra cả mã hóa các ký hiệu tương thích với Java (ví dụ: không gian trở thành $ u0020) và phiên bản thô hay không, nhưng nó _could_ nếu ai đó viết một ngôn ngữ đặt ký tự không chuẩn trong tên phương thức. –

2

Chuỗi được bọc trong ` là số nhận dạng hợp lệ trong Scala, không chỉ đối với tên và phương thức của lớp mà còn đối với các hàm và biến.

1

Với tôi, đó chỉ là trình phân tích cú pháp và trình biên dịch được xây dựng theo cách cho phép điều đó, do đó nhóm Scala đã triển khai nó.

Tôi nghĩ rằng nó có thể được mát mẻ cho một coder để có thể cung cấp tên thật cho chức năng thay vì getThisIncredibleItem hoặc get_this_other_item.

Cảm ơn câu hỏi của bạn đã giúp tôi biết điều gì đó mới mẻ trong Scala!

5

Các Scala Language Specification:

Có ba cách để tạo thành một định danh. Trước tiên, số nhận dạng có thể bắt đầu bằng một chữ cái có thể được theo sau bằng một chuỗi tùy ý gồm chữ cái và chữ số. Điều này có thể được theo sau bởi ký tự gạch dưới ‘_’ và một chuỗi khác bao gồm chữ cái và chữ số hoặc của ký tự toán tử. Thứ hai, một mã định danh có thể bắt đầu với một toán tử theo sau là một chuỗi ký tự toán tử tùy ý. Hai dạng trước đó được gọi là định danh đơn giản. Cuối cùng, mã định danh cũng có thể được tạo thành bằng một chuỗi tùy ý giữa dấu ngoặc kép (hệ thống máy chủ có thể áp đặt một số hạn chế đối với các chuỗi số hợp pháp đối với số nhận dạng). Số nhận dạng sau đó bao gồm tất cả các ký tự không bao gồm các dấu ngoặc kép.

7

Khi @Rex Kerr trả lời, tính năng này dành cho tính tương hợp.Ví dụ,

Để gọi một phương thức java,

Thread.yield() 

bạn cần phải viết

Thread.`yield`() 

từ yield là một từ khóa trong scala.

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