Tôi đang bối rối bởi mô tả này trong "5.1.3 Độ phân giải Implicit" trong cuốn sách Giô-suê Suareth của Scala trong chiều sâu, trên trang 100:implicits cho các đối tượng trong Scala
Scala đối tượng không thể có bạn đồng hành các đối tượng cho liên quan. Bởi vì điều này, hàm ý liên quan đến loại đối tượng, được mong muốn trên phạm vi tiềm ẩn của loại đối tượng đó, phải được cung cấp từ phạm vi bên ngoài . Dưới đây là một ví dụ:
scala> object Foo {
| object Bar { override def toString = "Bar" }
| implicit def b : Bar.type = Bar
|}
defined module Foo
scala> implicitly[Foo.Bar.type]
res1: Foo.Bar.type = Bar
Nhưng trong khi tôi làm đối tượng Bar ngầm trong REPL:
scala> object Foo {
| implicit object Bar {
| override def toString = "isBar" }
| }
defined module Foo
scala> implicitly[Foo.Bar.type]
res0: Foo.Bar.type = isBar
Dường như nó không cần phải xác định một ngầm trong phạm vi bên ngoài. Hay tôi có ý nghĩa của Joshua hoàn toàn sai?
Khi nào cuốn sách được viết và bạn đang sử dụng phiên bản Scala nào? Điều này có thể đã thay đổi một chút trong 2,9 hoặc 2,10. – KChaloux
Mọi thứ như trong câu trả lời của tôi ít nhất là từ 2.9.x trở lên. Josh chắc hẳn đã đề cập đến Scala trước 2.9, hoặc không biết gì về ngữ nghĩa. FTR Tôi đã rất ngạc nhiên và vui mừng khi tôi phát hiện ra rằng điều này là có thể. –
Cảm ơn bạn đã trả lời. Nó được đề xuất trong cuốn sách này bao gồm 2.7.x đến 2.9.x. Tôi có 2,10 được cài đặt trên máy tính của tôi có thể hoạt động khác nhau. – cfchou