3

Seq.cast次のような単純なものであっても、使用は常に失敗するようです。

let xor c = Seq.cast c |> Seq.reduce (^^^)
xor [1;3]       // Works, assuming because no cast is necessary
xor ['a';'b']   // Fails
xor [2u]        // Fails

後者の2つは、指定されたキャストで失敗しますが無効です。私は何が欠けていますか?

Seq.castたくさんのものをに変換しようとしていますuint16が、何らかの理由で(注釈を付けてもSeq.cast<uint32>)常に失敗します。これはどうしたの?

4

2 に答える 2

8

これは、型強制ではなく、型キャストSeq.castのみを行うためだと思います。Seq.map uint32 c |> Seq.reduce (^^^)

キャストと強制の違いは、キャストが静的型を変更する一方で、動的型を変更せずに値が解釈されることです (例: これAnimalが本当に a であることはわかっていますDog)。強制は完全に新しい値を作成します...少なくとも言語から視点。CLR の分割は、値の型 (強制) と参照の型 (キャスト) の間でほとんど分かれているように見えます。

于 2009-11-10T23:40:13.880 に答える
3

こちらもご覧ください

この C# コードは F# ではどのように見えるでしょうか? (パート 1: 式とステートメント)

これは、キャストが C# で (少なくとも) 4 つの異なる操作を意味する方法と、それらの異なる操作のそれぞれが特定の F# 機能にどのようにマップされるかについて説明しています。

于 2009-11-11T01:06:36.343 に答える