Khi biên dịch đoạn mã sau:Tại sao Scala thoát không gian trong tên phương thức?
class MyTest {
@org.junit.Test
def `test test`() {
}
}
Phương pháp test test
đang được đưa vào bytecode như test$u0020test
.
Tại sao điều đó xảy ra và làm thế nào điều này có thể bị vô hiệu hóa?
Dấu cách là số nhận dạng hợp lệ cho tên phương thức theo thông số JVM. Ngoài ra, không có đề cập đến mã hóa như vậy trong đặc tả ngôn ngữ Scala. Hơn nữa, các ngôn ngữ JVM khác như Groovy và Groovy dựa trên Spock Framework không mã hóa không gian.
Tại sao tôi cần điều này: Kiểm tra tên và báo cáo kiểm tra JUnit thân thiện với con người.
Java 1.8.0_45, Scala 2.11.6
Tôi đoán lý do duy nhất cho điều này là tính đồng nhất. Họ có thể không muốn đặc biệt trường hợp các lớp nhân vật không phải là số nhận dạng hợp lệ. Về mặt kỹ thuật, tôi cũng không thấy cần thiết. –
Tôi chắc chắn lý do tại sao bạn mong muốn tìm thấy điều này trong đặc tả ngôn ngữ; đó là một đặc điểm kỹ thuật của * ngôn ngữ *, không phải trình biên dịch, phải không? –