방금 F # (. NET에 대한 경험이 거의 없음)을 배우기 시작 했으므로 매우 간단한 질문 인 F #에서 네임 스페이스와 모듈의 차이점은 무엇입니까?
감사
데이브
편집 : 대답 Brian에 감사드립니다. 그것이 내가 알고 싶었던 것입니다. 설명 : 네임 스페이스도 열 수 있습니까 (C # using 문과 유사)?
방금 F # (. NET에 대한 경험이 거의 없음)을 배우기 시작 했으므로 매우 간단한 질문 인 F #에서 네임 스페이스와 모듈의 차이점은 무엇입니까?
감사
데이브
편집 : 대답 Brian에 감사드립니다. 그것이 내가 알고 싶었던 것입니다. 설명 : 네임 스페이스도 열 수 있습니까 (C # using 문과 유사)?
답변:
네임 스페이스는 많은 산업 언어에서 흔히 볼 수있는 .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 #의 '최상위 수준'에서 코드를 입력하면이 코드는 암시 적으로 모듈에 들어갑니다.
어느 정도 도움이되기를 바라는 것은 꽤 개방적인 질문입니다. :)