2010-05-13 3 views
1

나는 F 번호에 새로운 오전이 코드가 있습니다이 F # 예제에서 Some/None Options는 어떻게 사용합니까?

if s.Contains("-") then 
    let x,y = 
     match s.Split [|'-'|] with 
     | [|a;b|] -> int a, int b 
     | _ -> 0,0 

공지 사항 우리가 있다는 것을 확인 '-'우리는 문자열을 분할하기 전에 문자열을, 그래서 경기가 정말 필요하지 않습니다. 옵션으로 이것을 다시 쓸 수 있습니까?

는 내가 원래이 (하지만 난 경고를 받고 있었다)이었고,이 코드를 변경 :

if s.Contains("-") then 
    let [|a;b|] = s.Split [|'-'|] 
    let x,y = int a, int b 

참고 : 나는 (범위는 문자열로 표현된다) 숫자의 범위를 분할하고 만드는 오전 범위의 최소치와 최대치를 나타내는 정수 값

답변

4

일치 항목은 "1-2-3"이 될 수 있으며 3 요소 배열을 갖습니다.

경기를 없애려는 시도를 끝내면 친구가 아니라 적입니다. :) 당신의 적이 적중 사전 검증 ("포함하는 경우"논리, 잘못했다)에서 오해입니다.

두 부분으로 구성된이 블로그 시리즈를 즐기실 수 있습니다. Some/None 의견에 대해서는

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!180.entry

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!181.entry

편집

, 그래, 당신은 할 수

parseRange 반환 값이 Some (성공)입니다
let parseRange (s:string) = 
    match s.Split [|'-'|] with 
    | [|a;b|] -> Some(int a, int b) 
    | _ -> None 

let Example s = 
    match parseRange s with 
    | Some(lo,hi) -> printfn "%d - %d" lo hi 
    | None -> printfn "range was bad" 

Example "1-2" 
Example "1-2-3" 
Example "1" 

또는 None (실패) 및 나머지 프로그램은 dec ision은 나중에이를 기반으로합니다.

+0

좋은 전화, 고마워요 :) – Phobis

+0

그냥 0,0을 반환하고 싶지는 않지만 코드가 있으면 실패를 처리해야합니다. Some/None ...을 사용하는 방법을 모른다. 내가 사용할 수있는 곳인가? 호출자에게 일부 값으로 성공했거나 성공하지 못했다고 말하고 싶습니다. – Phobis

+0

일부/없음 예를 사용하면이 작업을 수행 할 수 있습니까? let x, y = 예 "1-2"? Some/None 값은 어떻게 사용합니까? – Phobis

관련 문제