2009-10-06 4 views
7

저는 최근에 F #의 객체 지향 측면을 배우려고 노력했으며 언어에서 유형/모듈에 대한 액세스를 제한하는 방법에 대해 궁금해졌습니다. 다른 방법F #의 서명 파일과 액세스 수정 자

Example.fsi

module Stack = 
    val foo : string 

Example.fs

module Stack = 
    let foo = "foo" 
    let bar = "bar" 

이 :

은보다 구체적으로는, 내가이 글을 쓰는 사이의 차이를 알고 싶어요

module Stack = 
    let foo = "foo" 
    let private bar = "bar" 

결국 정확히 똑같은 것을 수행하지 않습니까? C# 배경에서 왔기 때문에 서명 (FSI) 파일에 대한 액세스 한정자를 사용하는 편이 낫습니다. 그들은 시그니처 파일이 접근 수정 자 (modifier)가 제공하지 않는 어떤 것을 제공하지 않는 반면, 그들은 더 다재다능한 것 같습니다 (예를 들어 네임 스페이스의 모듈/유형에 적용 할 수 있습니다).

+0

예가 어쨌든 작동하지 않아야합니다 .-) (foo _ = "bar"라고합시다.) – Dario

+0

왜 작동하지 않아야합니까? 이 예제는 나를 위해 잘 컴파일됩니다. – Noldorin

+0

.fsi는 foo를 함수로 선언하지만 .fs는이를 값으로 정의합니다. – Brian

답변

9

거의 동일한 것을 수행합니다. (즉에 대한 의견이 무엇을 의미하는지 확신 할 수 없었다, 당신이 너무 네임 스페이스 유형에 대한 .fsi 파일을 사용할 수 있습니다.)

서명 파일은 몇 가지 장점이 있습니다

  • 당신이 엔티티에게 public를 만들 수 있습니다 파일의 지속 시간을 입력 한 다음 프로젝트의 후속 파일에 private을 입력합니다.
  • 서명 파일에 간단한 요약 만 표시 할 수 있으므로 많은 수의 코드를 스캔하지 않아도 공용 인터페이스를 쉽게 읽을 수 있습니다.

첫 번째 글 머리 기호는 삼가 할 필요가 없습니다. 어셈블리 내부의 캡슐화는 실제로 매우 큰 프로젝트의 경우 매우 큰 특징입니다. File1.fs 내에서 서로에게 공개되는 몇 가지 유형을 정의 할 수 있지만 나머지 유형 (File2.fs, File3.fs 등)에서만 공개되는 유형/메소드의 하위 세트 만 가질 수 있습니다 (C++에서 '친구'와 조금 비슷합니다).

+1

@ 브라이언 : 답변 주셔서 감사합니다. http://en.wikibooks.org/wiki/F_Sharp_Programming/Modules_and_Namespaces - 네임 스페이스에서 FSI를 사용할 수없는이 페이지의 맨 아래를 참조했습니다. 프로젝트의 "속편"이 의미하는 바를 명확히 할 수 있습니까? – Noldorin

+1

나는 그 문서가 잘못되었다는 것을 알았다. @Juliet, 이것을 읽으신다면, 그것을 업데이트 하시겠습니까? 네임 스페이스가 들어있는 .fs 파일에서 fsc --sig를 사용하면 네임 스페이스에 대한 .fsi 코드 구문을 볼 수 있습니다. – Brian

+1

@Brian : 아, 그 정도면 충분합니다. 유용한 작은 명령, 즉. 설명을 주셔서 감사합니다. – Noldorin