types - 类型推理规则
问题描述
我试图制作一个函数,它需要两个字符,获取它们的 ASCII 值并返回它们的 XOR。当然,这有效:
> let a, b = '#', '%' in (int a) ^^^ (int b);;
val it : int = 6
然而,这会产生一个接受整数的函数,但这里不是这种情况。
> let xor a b = (int a) ^^^ (int b);;
val xor : a:int -> b:int -> int
正如预期的那样,我不能在以前的参数上调用这个函数:
> let a, b = '#', '%' in xor a b;;
let a, b = '#', '%' in xor a b;;
---------------------------^
/home/cos/stdin(121,28): error FS0001: This expression was expected to have type
int
but here has type
char
为什么会这样?如何直接指定参数的类型?
解决方案
这是如何:
let xor (a: char) (b: char) = (int a) ^^^ (int b)
您还可以将其标记为内联以获得通用函数
let inline xor a b = (int a) ^^^ (int b)
这将具有类型
val inline xor :
a: ^a -> b: ^b -> int
when ^a : (static member op_Explicit : ^a -> int) and
^b : (static member op_Explicit : ^b -> int)
因此适用于任何可以转换为int
.
原因是
let xor a b = (int a) ^^^ (int b)
推断有类型int -> int -> int
是对于算术运算,F#int
默认推断类型(参见语言规范,第 13 页)
推荐阅读
- cakephp - CakePHP TinyAuth 适配器实现
- shell - 合并多个 csv 文件,其中包含混合的标题和没有标题
- sql - 如何在不同的表中添加基于 categoryid 的外键?
- javascript - angularjs $resource: [资源中的动作名称] 不是函数
- python-3.x - 数据框:将基于行的交易数据转换为每个日期的聚合
- c++ - 将结构向量保存到文件中并从 C++ 文件中读取结构向量
- mongodb - 无法在 db.createUser() 中使用身份验证机制
- python - 在列表中搜索;根据搜索输入显示名称
- windows-subsystem-for-linux - 如何从另一台计算机访问 linux 2 文件系统的 windows 子系统?
- python - Python:检查程序是否正在关闭