2014-10-07 3 views
2

F #에 아날로그가 있습니까? 예 :F ++ 함수 내의 정적 변수와 같은 C++ -

let f() = 
    let mutable static a = 0 
    ... 

?

+0

함수 외부에서이 변수에 액세스해야합니까? 정적 수정 자 (static modifier)는 무엇입니까? – Petr

+0

@ Petr No. 외부 액세스 권한이 없습니다. 나는 그것이 "기능적인 방법"이 아니라는 것을 안다. 함수는 한 번만 호출해야합니다. 그 이유는 관심이 있습니다. –

답변

7

아니다 let f() = ... ~ let f = fun() -> ...이면 a의 선언을 f의 정의 안에 넣을 수 있지만 functio 시작 전에 엔. 그러면 af에 로컬로 유지하면서 기능을 a 이상으로 닫을 수 있습니다. 이 문제는 변경 가능한 변수를 닫을 수 없기 때문에 대신 참조를 사용해야합니다.

let f = 
    let a = ref 0 
    fun() -> 
     .... 
+0

완벽. 감사. –

4

간단한 아날로그 기능 전에하자를 넣어하는 것입니다

let mutable static a = 0 
let f() = 

당신이 정말로 당신이 부모 모듈의 전체 일을 싸는 수있는 변수를 숨기고 싶어합니다.

그렇지 않으면 시퀀스 표현식은 함수에서 변수를 기억할 수 있지만 상당히 중요한 변화입니다.

일부 다른 아이디어 - 클래스 안에 숨기기 :

type t() = 
    static let mutable t = 1 
    static member f() = 1 

또는 모듈 방식의 모듈

module t = 
    let mutable private t = 1 
    let f() = 1 

를, F는 볼 수 있지만, desugar 경우 t는

+0

sepp2k에서 변형 된 것보다 조금 더 복잡합니다. 도와 줘서 고마워. –