Sự khác biệt giữa không gian tên và mô-đun trong F # là gì?


85

Tôi vừa mới bắt đầu học F # (với ít kinh nghiệm về .NET) vì vậy hãy tha thứ cho tôi vì câu hỏi rất đơn giản có lẽ là: Sự khác biệt giữa không gian tên và mô-đun trong F # là gì?

Cảm ơn

Dave

Chỉnh sửa: Cảm ơn câu trả lời Brian. Đó là những gì tôi muốn biết. Chỉ cần giải thích rõ: bạn cũng có thể mở một không gian tên (tương tự như câu lệnh sử dụng C #)?


4
Và một lưu ý nữa, khi bạn mở một không gian tên trong F #, chẳng hạn như Hệ thống, bạn cũng có quyền truy cập vào các không gian tên phụ của nó. Vì vậy, trong C #, nếu bạn mở System, bạn vẫn cần phải viết "System.IO.File". Trong F #, bạn có thể viết "IO.File". Tôi thấy điều này làm cho mã đẹp hơn nhiều.
MichaelGG

Câu trả lời:


93

Không gian tên là một thứ .Net, phổ biến trong nhiều ngôn ngữ công nghiệp mạnh, chỉ là một cách để tổ chức các khuôn khổ và tránh xung đột đặt tên giữa các thư viện khác nhau. Cả bạn và tôi đều có thể xác định một kiểu "Foo" và sử dụng chúng trong một dự án, miễn là chúng nằm trong các không gian tên khác nhau (ví dụ: NS1.Foo và NS2.Foo). Không gian tên trong .Net chứa các loại.

Một mô-đun là một thứ F #, nó gần tương tự như một "lớp tĩnh" ... nó là một thực thể có thể chứa các giá trị và hàm được ràng buộc, cũng như các kiểu (lưu ý rằng không gian tên không thể chứa trực tiếp giá trị / hàm, không gian tên chỉ có thể chứa các kiểu, mà bản thân chúng có thể chứa các giá trị và hàm). Những thứ bên trong mô-đun có thể được tham chiếu qua "ModuleName.Thing", cú pháp tương tự như đối với không gian tên, nhưng các mô-đun trong F # cũng có thể được 'mở' để cho phép truy cập không đủ điều kiện, ví dụ:

open ModuleName
...
Thing  // rather than ModuleName.Thing

(CHỈNH SỬA: Không gian tên cũng có thể được mở tương tự, nhưng thực tế là các mô-đun có thể chứa các giá trị và chức năng làm cho việc mở một mô-đun trở nên 'thú vị' hơn, trong đó bạn có thể kết nối với các giá trị và chức năng, ví dụ: "cos", là tên bạn có thể sử dụng trực tiếp, trong khi ở các ngôn ngữ .Net khác, bạn thường phải đủ điều kiện cho nó, ví dụ: "Math.cos").

Nếu bạn nhập mã ở 'cấp cao nhất' trong F #, mã này hoàn toàn nằm trong một mô-đun.

Hy vọng rằng sẽ giúp được phần nào, đó là một câu hỏi khá mở. :)


Điều đó không thể hoàn toàn chính xác. module tồn tại trong C # là tốt, làm họ không ?: stackoverflow.com/questions/645728/what-is-a-module-in-net
Alexander Bird

1
Chà, có một netmodule, là một thứ .NET, và có một mô-đun F #, là một thứ F #, và tôi nghĩ VB có thể có một cấu trúc mô-đun và các lớp là 'mô-đun' theo nghĩa kỹ thuật phần mềm nói chung ... Nhưng câu hỏi ban đầu là về mô-đun F #.
Brian,

1
Có một liên kết tuyệt vời ở đây , giải thích mối quan hệ giữa hợp ngữ và mô-đun mạng - một hợp ngữ duy nhất có thể chứa 2 mô-đun mạng được viết bằng 2 ngôn ngữ khác nhau.
Darius

2
Có vẻ như 'sử dụng tĩnh' trong C # 6
Bruno Garcia.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.