リストタイプに一致するFSharpパターン

ドミトリーA.グレチカ

タイプ「obj」のオブジェクトobj1を実際のタイプに応じて一致させたい。問題は、リストタイプのタイプチェックパターン(以下の例の2番目のパターン)がF#リストと一致しないことです。

let obj1 = [1;2;3] :> obj
match obj1 with
    | :? System.Array as a -> printfn "it's an array: %A" a
    | :? List<_> as l -> printfn "It's a list: %A" l
    | _ -> printfn "other type"

「その他のタイプ」を出力しますが、「リストです:[1; 2; 3]」と予想します。

リストタイプを正しくチェックする方法は?

マーク・シーマン

ダニエル・ファビアンはすでに彼の答えで問題を説明しています。

彼のソリューションを実装する1つの方法は、アクティブパターンを使用することです。

let (|IsList|_|) (candidate : obj) =
    let t = candidate.GetType()
    if t.IsGenericType && t.GetGenericTypeDefinition() = typedefof<list<_>>
    then Some (candidate :?> System.Collections.IEnumerable)
    else None

これで、このアクティブなパターンを使用するように一致を変更できます。

let obj1 = [1;2;3] :> obj
match obj1 with
    | :? System.Array as a -> printfn "it's an array: %A" a
    | IsList l -> printfn "It's a list: %A" l
    | _ -> printfn "other type"

これは印刷します:

> It's a list: [1; 2; 3]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

シェルスクリプトのパターンに一致するファイルを移動する

分類Dev

Windowsバッチスクリプト:パターンに一致する最新のファイル

分類Dev

erlangのバイナリに一致するパターン

分類Dev

パターンに一致するファイルの一意のヘッダーのリスト

分類Dev

Javaのパターンに一致するディレクトリ内のファイルのリスト

分類Dev

ApacheRewriteRule-パターンに一致するリライトリクエスト

分類Dev

マトリックスに一致するJavascriptパターン

分類Dev

パターンに一致し、区切り文字の後に行全体を削除するawkスクリプト

分類Dev

パターン一致に基づいて複数の行を挿入するPowershellスクリプト

分類Dev

クリップ: マルチスロットの値に一致する 1 回限りのパターン

分類Dev

タプルのリストでのパターン一致

分類Dev

パターンに一致するファクトまたはテンプレートインスタンスをカウントするCLIPS

分類Dev

正規表現:FilePathに一致するパターンはタイムスタンプにも一致します

分類Dev

完全に一致しないタイムスタンプに基づいてマージするパンダ

分類Dev

トークンに一致するハムクレストパターン

分類Dev

awkを使用してタイムスタンプに一致するリストを取り出す方法は?

分類Dev

リストの最初の要素のデータ型に一致するパターン

分類Dev

カンマ区切りのユーザーストーリーに一致するパターン

分類Dev

タプルのリストからすべての要素に一致するパターンを作成するにはどうすればよいですか?

分類Dev

パスに一致するLuaパターン

分類Dev

任意の数字に一致するパターンのインデックス

分類Dev

パターンに一致するredisのリストからキーを削除する方法は?

分類Dev

クラスコンストラクターに一致する構造化タイプ

分類Dev

ファイルリストコマンドlsの多くのパターンに一致しますか?

分類Dev

パターンに一致するフォルダ内にディレクトリを作成するためのシェルスクリプト

分類Dev

リストから複数のパターンに一致する文字列を削除する

分類Dev

パターンに一致するURLのリストを抽出するメソッド

分類Dev

テキスト処理のスクリプト:パターン全体が一致する場合にのみ、一連の行を削除します

分類Dev

SSIS C#スクリプトタスク:大きなXMLファイルでパターンを増分と一致/置換する方法

Related 関連記事

  1. 1

    シェルスクリプトのパターンに一致するファイルを移動する

  2. 2

    Windowsバッチスクリプト:パターンに一致する最新のファイル

  3. 3

    erlangのバイナリに一致するパターン

  4. 4

    パターンに一致するファイルの一意のヘッダーのリスト

  5. 5

    Javaのパターンに一致するディレクトリ内のファイルのリスト

  6. 6

    ApacheRewriteRule-パターンに一致するリライトリクエスト

  7. 7

    マトリックスに一致するJavascriptパターン

  8. 8

    パターンに一致し、区切り文字の後に行全体を削除するawkスクリプト

  9. 9

    パターン一致に基づいて複数の行を挿入するPowershellスクリプト

  10. 10

    クリップ: マルチスロットの値に一致する 1 回限りのパターン

  11. 11

    タプルのリストでのパターン一致

  12. 12

    パターンに一致するファクトまたはテンプレートインスタンスをカウントするCLIPS

  13. 13

    正規表現:FilePathに一致するパターンはタイムスタンプにも一致します

  14. 14

    完全に一致しないタイムスタンプに基づいてマージするパンダ

  15. 15

    トークンに一致するハムクレストパターン

  16. 16

    awkを使用してタイムスタンプに一致するリストを取り出す方法は?

  17. 17

    リストの最初の要素のデータ型に一致するパターン

  18. 18

    カンマ区切りのユーザーストーリーに一致するパターン

  19. 19

    タプルのリストからすべての要素に一致するパターンを作成するにはどうすればよいですか?

  20. 20

    パスに一致するLuaパターン

  21. 21

    任意の数字に一致するパターンのインデックス

  22. 22

    パターンに一致するredisのリストからキーを削除する方法は?

  23. 23

    クラスコンストラクターに一致する構造化タイプ

  24. 24

    ファイルリストコマンドlsの多くのパターンに一致しますか?

  25. 25

    パターンに一致するフォルダ内にディレクトリを作成するためのシェルスクリプト

  26. 26

    リストから複数のパターンに一致する文字列を削除する

  27. 27

    パターンに一致するURLのリストを抽出するメソッド

  28. 28

    テキスト処理のスクリプト:パターン全体が一致する場合にのみ、一連の行を削除します

  29. 29

    SSIS C#スクリプトタスク:大きなXMLファイルでパターンを増分と一致/置換する方法

ホットタグ

アーカイブ