使用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
后两者因指定 Actor 无效而失败。我错过了什么?
我正在尝试使用Seq.cast
将一堆东西转换为 uint16
,但由于某种原因它总是失败(即使我用 Seq.cast<uint32>
注释它)。这是怎么回事?
最佳答案
我相信这是因为 Seq.cast
只会执行类型强制转换,而不是类型强制:您想要 Seq.cast。映射 uint32 c |> Seq.reduce (^^^)
.
强制转换和强制转换之间的区别在于,当强制转换更改静态类型时,值会被解释为不更改其动态类型(例如:我知道这个 Animal
实际上是 Dog
),强制创建了一个全新的值......至少从语言的角度来看。 CLR 中的划分似乎主要集中在值类型(强制)和引用类型(强制转换)之间,这使得保持直线更容易一些。
关于.net - 使用 Seq.cast 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1711896/