2010-08-19 6 views
17

Sách hay nói rằng:Tôi có cần nhập các thành viên của một đối tượng đơn lẻ vào lớp đồng hành của nó trong Scala không?

Lớp và đối tượng đồng hành của nó có thể truy cập các thành viên riêng tư của nhau.

Có lẽ ngây thơ, tôi đã hiểu điều này là có nghĩa là một lớp không cần phải nhập khẩu thành viên một cách rõ ràng từ đối tượng đồng hành của nó. Ví dụ: các công việc sau sẽ hoạt động:

object Foo { 
    def bar = 4 
} 

class Foo { 
def foo = bar 
} 

Vâng, lý do bạn đọc là không. Vì vậy, tôi có thực sự cần tuyên bố điều gì đó như thế này không:

class Foo { 
    import Foo._ 

    def foo = bar 
} 

Trả lời

17

Có, bạn làm, giống như bạn nói. Có quyền truy cập và có phạm vi - những gì lớp/đối tượng đồng hành có quyền truy cập, không phải phạm vi.

Giống như tuyên bố điều gì đó công khai và riêng tư - nó không mang những thành viên đó vào phạm vi của mọi người, chỉ cần cấp cho họ quyền truy cập vào phạm vi đó.

+2

thấy http://stackoverflow.com/q/23704769/86485 đối với một số thảo luận thêm về _why_ đây là trường hợp –

3

Có (và tôi muốn 15 điểm của tôi cho điều đó!)

Tuy nhiên, để mở rộng, phạm vi của họ không chồng chéo lên nhau, vì vậy việc nhập khẩu là cần thiết.

+1

Xin lỗi, bạn trễ 53 giây :-) – lindelof

+1

Tôi biết, chết tiệt! Nhân vật Daniel đó sẽ là cái chết của tôi. –

4

"có thể truy cập các thành viên tư nhân" có nghĩa là các công việc sau:

object Foo { 
    private def bar = 4 
} 

class Foo { 
    def foo = Foo.bar 
} 
+2

Nếu muốn, bạn có thể hạn chế quyền truy cập bằng 'def [this]' def bar = 4'. – retronym