F #에서 네임 스페이스와 모듈의 차이점은 무엇입니까?


86

방금 F # (. NET에 대한 경험이 거의 없음)을 배우기 시작 했으므로 매우 간단한 질문 인 F #에서 네임 스페이스와 모듈의 차이점은 무엇입니까?

감사

데이브

편집 : 대답 Brian에 감사드립니다. 그것이 내가 알고 싶었던 것입니다. 설명 : 네임 스페이스도 열 수 있습니까 (C # using 문과 유사)?


4
그리고 System과 같은 F #에서 네임 스페이스를 열면 하위 네임 스페이스에도 액세스 할 수 있습니다. 따라서 C #에서 시스템을 열면 "System.IO.File"을 작성해야합니다. F #에서는 "IO.File"을 쓸 수 있습니다. 이것이 코드를 훨씬 더 멋지게 만듭니다.
MichaelGG

답변:


94

네임 스페이스는 많은 산업 언어에서 흔히 볼 수있는 .Net 사물이며 프레임 워크를 구성하고 서로 다른 라이브러리 간의 이름 충돌을 방지하는 방법입니다. 서로 다른 네임 스페이스 (예 : NS1.Foo 및 NS2.Foo)에있는 경우 "Foo"유형을 정의하고 둘 다 프로젝트에서 사용할 수 있습니다. .Net의 네임 스페이스에는 유형이 포함됩니다.

모듈은 F # 사물이며, "정적 클래스"와 거의 유사합니다 ... let-bound 값과 함수는 물론 형식을 보유 할 수있는 엔터티입니다 (네임 스페이스는 값 / 함수, 네임 스페이스를 직접 포함 할 수 없습니다. 자체적으로 값과 함수를 포함 할 수있는 유형 만 포함 할 수 있습니다. 모듈 내부의 항목은 네임 스페이스와 동일한 구문 인 "ModuleName.Thing"을 통해 참조 할 수 있지만 F #의 모듈은 비정규 액세스를 허용하기 위해 '열릴'수도 있습니다.

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

(편집 : 네임 스페이스도 비슷하게 열 수 있지만 모듈이 값과 함수를 포함 할 수 있다는 사실은 값과 함수 (예 : "cos")를 사용할 수있는 이름으로 끝낼 수 있다는 점에서 모듈을 더 '흥미 롭다 ")하게 만듭니다. 다른 .Net 언어에서는 일반적으로 "Math.cos"와 같이 항상 자격을 부여해야합니다.

F #의 '최상위 수준'에서 코드를 입력하면이 코드는 암시 적으로 모듈에 들어갑니다.

어느 정도 도움이되기를 바라는 것은 꽤 개방적인 질문입니다. :)


그것은 완전히 정확할 수 없습니다. 모듈은 할뿐만 아니라 C #으로 존재 그들이하지? stackoverflow.com/questions/645728/what-is-a-module-in-net
알렉산더 새

1
글쎄요, netmodule은 .NET이고 F # 모듈은 F #이고 VB는 아마도 모듈 구조를 가지고 있고 클래스는 일반적인 소프트웨어 공학적 의미에서 '모듈'이라고 생각합니다. 하지만 원래 질문은 F # 모듈에 관한 것이 었습니다.
Brian

1
여기 에는 어셈블리와 넷 모듈 간의 관계를 설명 하는 훌륭한 링크가 있습니다 . 단일 어셈블리에는 2 개의 서로 다른 언어로 작성된 2 개의 넷 모듈이 포함될 수 있습니다.
Darius

2
# 6 C의 '정적을 사용하여'유사
브루노 가르시아
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.