2013-06-10 25 views

Trả lời

11

Các sự khác biệt là:

Trong Option 1 việc nhập có thể thực hiện được cho toàn bộ phạm vi. tức là bất kỳ lớp/đặc điểm/chức năng trong com.somePackage thể được sử dụng bất cứ nơi nào bên trong/ngoài MyClass

Nhưng trong trường hợp của Option 2 nó chỉ có thể được sử dụng bên trong MyClass và không nằm ngoài điều đó bởi vì phạm vi import được giới hạn bên trong chỉ MyClass.

15

Trong Scala, import s được lexically scoped. import định ed chỉ hiển thị trong phạm vi họ import ed trong.

Trong trường hợp đầu tiên, phạm vi là các tập tin, vì vậy, import s sẽ được hiển thị trong toàn bộ tập tin, nhưng không phải trong các file khác. Trong trường hợp thứ hai, phạm vi là lớp, do đó, import s sẽ hiển thị trong toàn bộ lớp, nhưng không hiển thị trong các lớp khác thậm chí trong cùng một tệp (ngoại trừ các khóa học được lồng trong MyClass).

Bạn cũng có thể giới hạn phạm vi của một import chỉ để một phương pháp duy nhất một thậm chí là một khối duy nhất (!)

class Foo { 
    def bar { 
    // do something 
    { 
     import baz.quux.Frotz 
     // use Frotz 
    } 
    // Frotz not visible here 
    } 
} 

Đây là một ví dụ tốt đẹp của Scala của đặn, tính trực giao và đơn giản. Ví dụ. trong Java, chặn tạo phạm vi cho các biến cục bộ nhưng không cho các số import s (hoặc các phương thức hoặc bất kỳ thứ gì khác). Trong Scala, khối tạo ra phạm vi. Giai đoạn. Không có trường hợp ngoại lệ, không có trường hợp góc.

import nằm giữa các dấu ngoặc nhọn, chỉ hiển thị giữa các dấu ngoặc nhọn. Nó chỉ làm những gì bạn mong đợi.

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