2009-04-27 25 views
64

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

Cảm ơn

Dave

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

+3

Và một lưu ý nữa, khi bạn mở một không gian tên trong F #, 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 rất nhiều. – MichaelGG

Trả lời

78

Không gian tên là một điều .Net, phổ biến trong nhiều ngôn ngữ công nghiệp, 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ể định nghĩa một loại "Foo" và sử dụng chúng cả trong một dự án, miễn là chúng ở 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ô-đun là điều F #, tương tự như "lớp tĩnh" ... là một thực thể có thể giữ các giá trị và hàm cho phép, cũng như các loại (lưu ý rằng không gian tên không thể chứa giá trị trực tiếp)/Hàm, các không gian tên chỉ có thể chứa các kiểu, mà chính chúng có thể chứa các giá trị và hàm). Những thứ bên trong một mô-đun có thể được tham chiếu qua "ModuleName.Thing", có cùng cú pháp với các 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 

(EDIT: Namespaces có thể cũng tương tự như được mở ra, nhưng thực tế là mô-đun có chứa các giá trị và chức năng làm cho việc mở một module thêm 'thú vị', trong đó bạn có thể gió lên 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ữ khác .Net bạn thường sẽ phải luôn đủ điều kiện, ví dụ như" Math.cos ").

Nếu bạn nhập mã ở 'cấp cao nhất' trong F #, mã này ngầm đi vào một mô-đun.

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

+0

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

+1

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

+1

Có một liên kết tuyệt vời [ở đây] (http://blogs.msdn.com/b/junfeng/archive/2005/02/12/371683.aspx), giải thích mối quan hệ giữa một hội đồng và một mô-đun mạng - một lắp ráp có thể chứa 2 netmodules được viết bằng 2 ngôn ngữ khác nhau. – Darius

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