빈을 정의하는 방법을 알고 싶습니다! OCaml에서 Hashtbl 타입의 전역 변수? 초기 크기를 모르고 성능상의 이유로 초기 크기를 추측하고 싶지 않기 때문에 Hashtbl.create를 사용하고 싶지 않습니다.OCaml 빈 글로벌 변수
기본적으로이 Hashtbl 변수는 함수에서 실제 Hashtbl을 할당 한 다음이 변수를 다른 함수와 공유하므로 항상 인수로 전달하지 않으려 고합니다. 세계화.
감사합니다,
Spasski
빈을 정의하는 방법을 알고 싶습니다! OCaml에서 Hashtbl 타입의 전역 변수? 초기 크기를 모르고 성능상의 이유로 초기 크기를 추측하고 싶지 않기 때문에 Hashtbl.create를 사용하고 싶지 않습니다.OCaml 빈 글로벌 변수
기본적으로이 Hashtbl 변수는 함수에서 실제 Hashtbl을 할당 한 다음이 변수를 다른 함수와 공유하므로 항상 인수로 전달하지 않으려 고합니다. 세계화.
감사합니다,
Spasski
당신은 무엇을 요구하는 것이 가능하다. 해시 테이블 옵션에 전역 참조를 정의 할 수 있습니다 (이 옵션을 사용하면 나중에이 필드를 초기화하지 않아도됩니다). 정의는 다음과 같이 표시됩니다
let hashtable = ref None
초기화가 될 것입니다 :
hashtable := Some (Hashtbl.create n)
그것을 사용하려면, 당신은 또한 당신이 아직 초기화되지 않은 경우 어떻게해야하는지 설명해야합니다 :
를match !hashtable with
| None -> assert false
| Some h -> frobnicate h
실제로 초기화되지 않은 변수는 OCaml 철학에 위배되며 인생을 더 어렵게 만듭니다. 이 접근법을 사용하지 말 것을 강력히 권합니다. 내 두 가지 제안은 다음과 같습니다.
예상 크기의 해시 테이블을 만들 때 발생하는 성능 손실을 확인합니다. 오버 헤드는 생각보다 훨씬 작을 수 있습니다.
어디서나 해시 테이블을 전달하십시오. 그것은 하나의 인수로 옵션 참조보다 짧습니다 ...
해시 테이블과 함수를 클래스에 넣으십시오. 예를 들어, 필요에 따라 OCaml의에서
를 Hashtable 성장, 그래서 당신은 처음 AG에 추측을 줄 수 있습니다 : 초기 수를 초과하지만 너무 원활하게 작동하지만
module A
let hash = Hashtbl.create 123;;
...
let exceed_hash() =
for i = 1 to 555 do
Hashtbl.add hash i (string_of_int i)
done;;
가이를 확인 자습서 더 많은 정보 http://www.ocaml-tutorial.org/hashtbl