7

F# で String.Split の .NET CLR バージョンを使用したいと考えています。具体的には、次のコードを使用したいと思います。

let main argv = 
    let s = "Now is the time for FOO good men to come to the aide of their country"
    let sepAry = [|"FOO"; "BAR"|]
    let z1 = s.Split sepAry
    0 // return an integer exit code

ただし、F# の Split のバージョンが .Net 4.5 のバージョンとは異なる方法で実装されているという事実 (私は信じています) のため、これはコンパイルに失敗します。私が欲しい.NETのバージョンは次のとおりです。

Split(String[], StringSplitOptions) 指定された文字列配列の要素で区切られた、この文字列内の部分文字列を含む文字列配列を返します。パラメータは、空の配列要素を返すかどうかを指定します。

以前は PowerPack に含まれていた Split の F# バージョンを取得していることを理解しています。そのため、実装が CLR バージョンとは異なります。

私が欲しいものを手に入れるための最良の方法は何ですか? Split の F# バージョンをオーバーライドして .Net バージョンを使用することは可能ですか? F# のバージョンを拡張することは可能ですか。

4

3 に答える 3

0

Kirelagin の言うとおりです。使用しようとしている String の Split メソッドは存在しません。2 番目の引数のない char 配列でのみ使用できます。このバージョンに頼る必要があります: http://msdn.microsoft.com/en-us/library/tabh47cf.aspx。また、C# の引数はタプルとして定義されているため、f# 以外の .NET API を呼び出すときは、引数を括弧で囲む必要があります。

String に独自の拡張メソッドを定義することもできます。このようにして、それが予期されるデフォルトの動作である場合、常に None を指定する必要はありません。

type System.String with
  member x.Split(separator : (string [])) = x.Split(separator, System.StringSplitOptions.None)
于 2013-05-27T20:39:38.777 に答える