2013-02-18 37 views
5

Tôi có một số lớp và đối tượng Scala, trong các gói của riêng chúng. Mỗi gói có một đối tượng gói xác định một số implicits, do đó, ví dụ import com.foo.bar._ nhập tất cả các hàm và lớp học từ gói barNhập nhiều gói Scala

Điều tôi muốn biết là có cách xác định nhập "ô" không, nói com.foo.all , như vậy mà

import com.foo.all._ 

tương đương với

import com.foo.bar._ 
import com.foo.baz._ 
import com.foo.qux._ 
... 

tôi có thể hiểu rằng đây có thể là một chút không rõ ràng, nhưng nếu tôi chúng ta xem xét trường hợp tôi có một số lượng lớn các gói của riêng tôi , điều này rõ ràng sẽ ngắn gọn hơn.

Trả lời

10

Dạng ngắn nhất tôi có thể đưa ra là:

import com.foo._, bar._, baz._, qux._ 

Ví dụ:

import scala.collection.mutable._, PriorityQueue._, ArrayBuffer._ 

EDIT

Có lẽ, bạn muốn sử dụng chỉ một số thứ nhất, as @alex23 pointed out, để bạn có thể viết:

import com.foo.{foo, bar, baz}, bar._, baz._, qux._ 
7

Các Scala cách để nhập khẩu nhiều lớp/đối tượng từ cùng một gói là:

import scala.collection.immutable.{Map, HashMap, etc} 

mát Scala chỉ lừa: răng cưa/đổi tên

import java.util.{Collection => JavaCollection} 
+0

IMO, @paulmdavies muốn nhập khẩu không chỉ Bản đồ, HashMap và như vậy, mà còn nội dung của họ. –

+0

Hãy nhớ rằng khi bạn nhập khẩu, hãy nói rằng, 'collection.mutable.ArrayBuffer._' các tên được nhập chỉ là những cái từ' đối tượng ArrayBuffer'. Bạn có thể nhập các thành viên lớp, nhưng chỉ từ một cá thể cụ thể. –

1

Hiện nay bạn không thể làm điều đó trivially, nhưng bạn có thể đến khá gần với một số nỗ lực.

Nếu bạn tạo package object all và đặt bí danh loại cho mọi lớp trong gói khác và tạo phương thức chuyển tiếp cho mọi phương thức (nếu các phương thức khác là đối tượng gói), thì quá trình nhập sẽ thực hiện những gì bạn muốn.

Đã có một số thảo luận về một số export feature sẽ làm cho điều này dễ dàng hơn nhiều, nhưng thậm chí nó không phải là một đề xuất cụ thể, hãy để một mình thực hiện.

Trong mọi trường hợp, bạn không cần phải lặp lại import hơn và hơn nữa:

import com.foo.bar._, com.foo.baz._, ... 

nhưng tất cả cách để rút ngắn danh sách tiếp tục không thực hiện chính xác những điều tương tự (ví dụ sẽ nhập tên bar chính nó, không chỉ nội dung của nó - điều này có thể không phải là một vấn đề cho bạn, nhưng nó là một cái gì đó để nhận thức).

Điều đó nói rằng, cho đến khi cơ chế xuất xuất xuất hiện, mã của bạn sẽ có thể đọc được và duy trì tối đa nếu bạn nhập mọi thứ trên một dòng riêng. Thật khó để nhận thấy một cái gì đó bị thiếu hoặc bổ sung khi mọi thứ bị kẹt trên một dòng.

0

Nếu bar._, baz._, qux._ chiếm tất cả mọi thứ trong com.foo hơn bạn chỉ có thể làm com.foo._