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ở. :)
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