casting - #(井号/井号)在类型签名中是什么意思?

标签 casting f# symbols type-signature

# 是什么意思类型签名中的意思,如 seq<#seq<'a>>seq<seq<'a>> 相比?

最佳答案

这称为灵活类型。简短的总结是 #type表示从 type 继承的任何类型.所以,在你的具体例子中seq<#seq<'a>>将是包含 'a 的任何集合的序列值(value)观。

调用函数时,F# 会自动将具体类型转换为接口(interface) - 例如,您可以调用带有 seq<'a> 的函数带数组 'a[]作为论据。但是,当您有数组时,这不起作用 - 因为 'a[][]仅实现 seq<'a[]>但不是 seq<seq<'a>> .

例如,以下两个函数返回嵌套序列的长度列表:

let f1 (s:seq<seq<'T>>) = [ for i in s -> Seq.length i ]
let f2 (s:seq<#seq<'T>>) = [ for i in s -> Seq.length i ]

但只有第二个可以在列表列表中调用:
[ [1]; [2;3] ] |> f1
// error FS0001: The type 'int list list' is not 
// compatible with the type 'seq<seq<'a>>'

[ [1]; [2;3] ] |> f2
// val it : int list = [1; 2]

关于casting - #(井号/井号)在类型签名中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23088084/

相关文章:

c# - 动态转换与反射调用 : which poison to pick?

f# - 使用 F# 数据 CSV 类型提供程序与 CSV 解析器和读取器之间的性能差异

unicode - 如果 Ascii 运算符是可定义的,为什么不可以定义 Unicode 符号?

html - 双正斜杠符号//的 HTML 代码是什么?

python - python 中缺少自动完成/转换的问题

python - 一种覆盖 'type()' 报告内容的方法

function - 在 Common Lisp 中将函数转换为字符串或符号

unicode - 圆圈中的感叹号的字符代码是什么?

int16_t 到 int 的对话是否会导致实现定义的行为?

F# Seq.sortBy 降序