使用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
Run Code Online (Sandbox Code Playgroud)
后两者失败,Specified Cast无效.我错过了什么?
我试图用来Seq.cast转换一堆东西uint16,但由于某种原因它总是失败(即使我用它注释Seq.cast<uint32>).怎么了?
我相信这是因为Seq.cast只会进行类型转换,而不是类型强制:你想要Seq.map uint32 c |> Seq.reduce (^^^).
铸造和强制之间的区别在于,当铸造改变静态类型时,一个值被解释为不改变它的动态类型(例如:我知道这Animal确实是一个Dog),强制创建一个全新的值...至少从语言中观点看法.CLR中的分割似乎几乎在值类型(强制)和引用类型(转换)之间,这使得它更容易保持直线.
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |