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