Một đầu mối là desugaring các lớp tiềm ẩn, giải thích trong the SIP-13:
implicit class RichInt(n: Int) extends Ordered[Int] {
def min(m: Int): Int = if (n <= m) n else m
...
}
sẽ được biến đổi bởi trình biên dịch như sau:
class RichInt(n: Int) extends Ordered[Int] {
def min(m: Int): Int = if (n <= m) n else m
...
}
implicit final def RichInt(n: Int): RichInt = new RichInt(n)
Như bạn có thể thấy, hàm ẩn được tạo có cùng tên với các lớp gốc. Tôi đoán nó được thực hiện như thế này để làm cho các lớp ngầm định dễ nhập hơn.
Như vậy trong trường hợp của bạn, khi bạn tạo một ngầm lớp trường hợp, có sự mâu thuẫn giữa tên phương pháp tạo ra bởi các implicit
từ khóa và đối tượng đồng hành tạo ra bởi các từ khóa case
.
Đây là lỗi. Tôi đã mở [SI-6227] (https://issues.scala-lang.org/browse/SI-6227), mặc dù nó sẽ không làm tôi ngạc nhiên khi khám phá ra nó là một bản sao. –
một 'lớp ẩn' không thể là một 'trường hợp lớp', đó là lý do duy nhất. – Valerin