1

私はF#を初めて使用し、次のコードを使用しています。

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 に答える 1

4

一致は不要ではありません。文字列は「1-2-3」である可能性があり、3要素の配列が得られます。

試合を取り除こうとするのをやめなさい、それはあなたの敵ではなくあなたの友人です。:)あなたの敵は、事前検証の誤った試みです(「含まれている場合」のロジックは間違っていました)。

この2部構成のブログシリーズをお楽しみいただければと思います。

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

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

編集

Some/コメントに関してNoneは、はい、できます

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"

ここで、parseRangeの戻り値はSome(成功)またはNone(失敗)であり、プログラムの残りの部分はそれに基づいて後で決定を下すことができます。

于 2010-05-13T19:10:23.687 に答える