は組合
答えて
私はそれがあることを意味したと仮定し
type Corner = Corner of int*int
その場合には、これが最初の値を取得します:
let (Corner(first,_)) = corner
@Fooleが提供する答えは良いですが、コメントIから一時変数first
を '宣言'する必要がないという印象を受けます。あなたがしたいのは、最初の値を引き出し、それを別の関数にパイプすることだけです。
これを自動的に行うことができることを私が認識している組み込み機能はありません。上記のCorner
タイプがDiscriminated Union(DU)の縮退ケースであると考えてください。通常、DUはより多くの症例を有し、それらはしばしば形状が不均一である。
Corner
のような単一のケースのDUを持つのがよい理由はありますが、そのタイプをよりスムーズにするためのさまざまな「ヘルパー」機能も提供することがよくあります。 、私は、Corner
モデルはA座標と仮定してきました。ここ
let cornerX (Corner(x, _)) = x
let cornerY (Corner(_, y)) = y
しかし、あなたがしたい場合は、名前を付けることができます:Corner
タイプの場合
、次のような機能を定義することができます機能fst
およびsnd
。あなたはそれをむしろ好むならば、それらを専用のモジュールに入れることもできます。
これは一時的な変数の手間をかけずにCorner
値から値を抽出し、配管することができるようになります:corner
はOPのように定義されて
> corner |> cornerX |> ((*) 10) |> string;;
val it : string = "10"
。
任意の2タプル/ nタプルの単一ケースの識別されたユニオンの汎用バージョン? – mbx
@mbx実際に何が起こっているのかは、ケースコンストラクタのパターンマッチングなので、私はそうは思わない。パターンマッチングでは、ケースコンストラクタの名前が重要です。実際には関数です。しかし、 'let'-bound関数を宣言する必要がない、簡潔なインライン選択肢のための@TheQuickBrownFoxの答えを見てください。 –
既に述べたように、名前を付けずに最初に識別されたユニオンケースを取得することはできません。しかし、ここでそれを行うには、非常に簡潔な方法です:
Corner (1,1) |> function Corner (x,_) -> x
これは一つのパラメータを持つ関数を作成し、そのパラメータにストレートパターンマッチにジャンプfunction
キーワードを使用しています。一致するケースは1つしかないので、1つの行にきれいに収まります。
- 1. 匿名組合と通常組合
- 2. 組合
- 3. 照合組合エラー
- 4. 組の組合を取る
- 5. 組み合わせは
- 6. Rは組み合わせ
- 7. エンティティフレームワークの組合
- 8. 組合せ
- 9. 選択組合
- 10. 私は労働組合を持って集計労働組合に
- 11. 列の組み合わせの組み合わせデータフレームの行ではない
- 12. 匿名組合が
- 13. ダブルヌル値組合PHP
- 14. ドッカーシェフ組合、違い
- 15. のgSOAP C組合
- 16. Python itertoolsの組み合わせの組み合わせ
- 17. データウェアハウス:冗長な組み合わせの組み合わせ
- 18. 交差と組合のタイプを組み合わせる方法
- 19. サブセットdata.frame組合、複数の間隔は
- 20. は、組み合わせグループとここ
- 21. スパークは、データフレームを組み合わせ、GraphX
- 22. 組み合わせは、ここで
- 23. Kenticoカスタムテーブルクエリまたは組み合わせ
- 24. 組み合わせるヘッダとはhtmlspecialchars
- 25. は、組合内の変数へのポインタ
- 26. 組み合わせbarplotとgrid.tableは
- 27. PHPのPostgreSQLは、ページネーションと組合
- 28. 組み合わせるSQLは
- 29. 組み合わせるアセンブリは
- 30. MySQLの労働組合は、ここで
ありがとう、私はタイプの型を意味しました:)しかし、この割り当ては、タプルのメンバーを使用するために一時変数を必要とすることを意味します(最初に参照するよりも作成します) –