函数签名
This commit is contained in:
parent
a6b27c3f64
commit
66103942b7
|
@ -0,0 +1,40 @@
|
||||||
|
module FunctionSign
|
||||||
|
|
||||||
|
// 函数签名是描述函数的一种标志
|
||||||
|
// 表达的是 输入类型 -> 输出类型 的标识
|
||||||
|
|
||||||
|
// 比如let add_one a = a + 1的函数签名是int -> int
|
||||||
|
// a的类型由表达式a + 1推断为int
|
||||||
|
// 该函数签名描述的是函数接受一个int返回一个int
|
||||||
|
|
||||||
|
// 函数签名中最后一个箭头处表达的就是返回类型
|
||||||
|
|
||||||
|
// 多参数的函数签名如下
|
||||||
|
let add a b = a + b
|
||||||
|
// int -> int -> int
|
||||||
|
// 实际上这是科里化的表达,相当与fun a:int -> fun b:int -> int
|
||||||
|
|
||||||
|
// 参数是一个函数的函数签名如下
|
||||||
|
let apply func value = func value
|
||||||
|
// ('a -> 'b) -> 'a -> 'b
|
||||||
|
// 首先('a -> 'b)是func函数的签名,函数参数的签名需要小括号
|
||||||
|
// 因为编译器无法推断出类型,所以他的类型会被自动泛化,成为泛型,泛型一般带'
|
||||||
|
// 表达的是接受一个从'a 映射到 'b的函数与一个'a的值,并且映射为'b
|
||||||
|
|
||||||
|
// 元组的签名用*
|
||||||
|
// 比如
|
||||||
|
let add_by_tuple (a, b) = a + b
|
||||||
|
// int * int -> int
|
||||||
|
// 因为元组是集合与集合之间的直积,所以一般用二元运算符*表示
|
||||||
|
|
||||||
|
// 列表的签名
|
||||||
|
let sum_by_list list: int = list |> List.reduce (fun a b -> a + b)
|
||||||
|
// list<int> -> int
|
||||||
|
|
||||||
|
// 数组的签名
|
||||||
|
let sum_by_array array: int = array |> Array.sum
|
||||||
|
// []<int> -> int
|
||||||
|
|
||||||
|
// 序列的签名
|
||||||
|
let sum_by_seq seq: int = seq |> Seq.sum
|
||||||
|
// seq<int> -> int
|
Loading…
Reference in New Issue