2011-11-28 18 views
3

Ocaml에서 문자열 옵션 데이터 유형을 문자열로 변환하려면 어떻게해야합니까?문자열 변환에 문자열 옵션

let function1 data = 
    match data with 
    None -> "" 
    | Some str -> str 

구현 오류가 무료입니까? 여기서 '데이터'는 string option 유형의 값을가집니다.

+1

물론입니다. 확신을 원한다면'None'과'Some ("foo")를 포함한 몇 가지 값으로 테스트 할 수 있습니다. –

+1

오류가 무슨 뜻인지에 따라 다릅니다. 이 컨텍스트에는 명백한 오류가 없지만 빈 문자열에 barfs를 사용하거나 (또는 ​​None을 사용하여 다른 선택을 기대하는 경우) 분명히 깨졌습니다. – stonemetal

답변

7

질문에 대답하려면 예.

이 간단한 기능은 Option 모듈에서 쉽게 찾을 수 있습니다.

let get_string data = 
    Option.default "" data 

다른 많은 유용한 기능이 그 module에서 옵션 유형 작업을위한있다, 당신은 불필요한 기능을 재정의 피하기 위해 그들을 밖으로 검사해야한다 : 예를 들어, Option.default 완전히 목적에 맞는.

+4

Option은 ExtLib에서만 사용할 수 있으며 표준 라이브러리에서는 제공되지 않습니다. –

+0

모두 감사합니다! 나는 그 오류가 어딘가에 있다는 것을 알아 냈다. 하지만 실제로 옵션 모듈과 관련하여 새로운 것을 배웠습니다. –

+0

'default'는 이제'BatOption' (배터리 패키지)에 있습니다. [this] (http://stackoverflow.com/questions/9914219/where-can-i-find-the-ocaml-option-module)을 참조하십시오. –

3

또 다른 포인트는 컴파일러가 잘못된 것이 있는지 알려주는 것입니다. 컴파일러가 불평하지 않으면 유형이 모두 의미가 있으며 사용자가 match 표현의 모든 사례를 다룹니다. OCaml 타입 시스템은 방해받지 않고 문제를 발견하는 데 매우 뛰어납니다. 이 작은 예제에서는 직접 타입을 정의 할 필요가 없습니다. 컴파일러는 data의 타입이 string option이라고 추론합니다.

컴파일러가 감지 할 수없는 많은 문제 중 하나는 우리가 감지 할 수없는 문제입니다. 우리는 빈 문자열에 None 매핑이 당신이 정말로하고 싶었던 것인지 알 수는 없지만 매우 합리적인 것처럼 보입니다.

+0

모두 감사합니다! 나는 그 오류가 어딘가에 있다는 것을 알아 냈다. 하지만 실제로 옵션 모듈과 관련하여 새로운 것을 배웠습니다. –