2012-01-01 16 views
7

Nếu tôi có một gói com.example, tôi có thể tạo ra một lớp trong gói phần mềm đó như thế này:Có sự khác biệt đáng kể nào giữa việc khai báo một lớp bình thường so với đối tượng gói không?

package com.example { 
    class MyClass 
} 

hay như thế này:

package com { 
    package object example { 
    class MyClass 
    } 
} 

Trong cả hai trường hợp, lớp kết quả là (như xa như mã Scala khác có liên quan, ít nhất) com.example.MyClass.

Chắc chắn có sự khác biệt ngẫu nhiên. Trong trường hợp đầu tiên, lớp được biên dịch kết quả là com/example/MyClass.class trong khi ở phần thứ hai nó là com/example/package$MyClass.class nhưng có sự khác biệt đáng kể nào không?

Trả lời

5

Sự khác biệt về tên tệp lớp được tạo ra đã được thảo luận trên scala-internals và hy vọng sẽ biến mất trong Scala 2.10.

+0

Vì vậy, để hoàn thành, câu trả lời cho câu hỏi "có sự khác biệt đáng kể nào ..." là "không"? Chỉ là sự khác biệt ngẫu nhiên sẽ biến mất trong 2,10? Cảm ơn! –

+0

Chính xác. (Có thể có nhiều lỗi ẩn nấp, dĩ nhiên.) Các đối tượng gói là một tính năng có thể phát triển hơn nữa: xem phần "Điều cần đến" ở đây: http://www.scala-lang.org/docu/files/packageobjects/ packageobjects.html – retronym

0

Lý do duy nhất tôi có thể nghĩ đến là thay vì có thể đưa chỉ class es, object s hoặc type s trong một gói, bạn có thể đặt def s, val s và var s trong một đối tượng .

+0

Có - Tôi biết rằng đó là điểm của đối tượng gói. Nhưng đó không phải là câu hỏi tôi đang hỏi. Câu hỏi đặt ra là, nếu tôi đặt một lớp trong một đối tượng gói là khác nhau theo bất kỳ cách nào để xác định nó một cách bình thường. –

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