1

F# を始めたばかりです。私は今それと同じくらいひどいですが、同様のスレッドを検索することも知りません.

これは私がやろうとしていることです:

let test animal =
    if animal :? Cat //testing for type
    then "cat" 
    elif animal :? Dog //testing for type
    then "dog" 
    elif animal = unicorn //testing value equality
    then "impossible"
    else "who cares"

基本的には、他の条件チェックとともに型テスト パターン マッチングが含まれます。最初の部分 (型チェック) は次のように実行できます。

let test(animal:Animal) =
    match animal with
    | :? Cat as cat -> "cat"
    | :? Dog as dog -> "cat"
    | _ -> "who cares"

1.上記の型テスト パターン マッチングに (最初の例のように) 同等性チェックを組み込む方法はありますか?

2.単一のパターン マッチング構造で実行されるこのような複数の種類のチェックは、F# サークルでは一般的に嫌われていますか?

4

1 に答える 1

5

これは、パターン マッチングを使用した同等のものです。

let test (animal:Animal) =
  match animal with
  | :? Cat as cat -> "cat"
  | :? Dog as dog -> "dog"
  | _ when animal = unicorn -> "impossible"
  | _ -> "who cares"

私はこれが眉をひそめているとは言いません。OOP で必要になることがありますが、C# の同等のものよりも優れています (より簡潔で明確です)。

于 2013-05-21T21:59:30.933 に答える