gpt4 book ai didi

types - 类型推理规则

转载 作者:行者123 更新时间:2023-12-05 01:27:23 25 4
gpt4 key购买 nike

我试图创建一个函数,它接受两个字符,获取它们的 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 (参见 language specification,第 13 页)

关于types - 类型推理规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57289756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com