f# module namespaces

¿Cuál es la diferencia entre un espacio de nombres y un módulo en F#?



module namespaces (1)

Acabo de empezar a aprender F # (con poca experiencia previa con .NET) así que discúlpeme por lo que probablemente sea una pregunta muy simple: ¿Cuál es la diferencia entre un espacio de nombres y un módulo en F #?

Gracias

Dave

Editar: Gracias por la respuesta, Brian. Eso es lo que quería saber. Solo una aclaración: ¿también puede abrir un espacio de nombres (similar a C # using statement)?


Un espacio de nombres es algo de .Net, común en muchos lenguajes de fortaleza industrial, solo una forma de organizar marcos y evitar conflictos de nombres entre bibliotecas diferentes. Tanto usted como yo podemos definir un tipo "Foo" y usar ambos en un proyecto, siempre que se encuentren en diferentes espacios de nombres (por ejemplo, NS1.Foo y NS2.Foo). Los espacios de nombre en .Net contienen tipos.

Un módulo es una cosa F #, es más o menos análoga a una "clase estática" ... es una entidad que puede contener valores y funciones, así como tipos (tenga en cuenta que los espacios de nombres no pueden contener directamente valores / funciones, espacios de nombres solo puede contener tipos, que a su vez pueden contener valores y funciones). Las cosas dentro de un módulo se pueden referenciar a través de "ModuleName.Thing", que es la misma sintaxis que para los espacios de nombres, pero los módulos en F # también se pueden ''abrir'' para permitir el acceso no calificado, por ejemplo

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

(EDITAR: también se pueden abrir espacios de nombres, pero el hecho de que los módulos puedan contener valores y funciones hace que abrir un módulo sea más ''interesante'', ya que puede terminar con valores y funciones, por ejemplo, "cos", nombres que puede usar directamente, mientras que en otros lenguajes .Net siempre tendrías que calificarlo, por ejemplo, "Math.cos").

Si escribe el código en ''el nivel superior'' en F #, este código entra implícitamente en un módulo.

Espero que ayude un poco, es una pregunta bastante abierta. :)