我有一段时间没有使用SML,我遇到了这行代码:
type memory = string -> int;
Run Code Online (Sandbox Code Playgroud)
这是否将'memory'定义为一个函数,它接受一个字符串a返回一个int,或完全不同的东西?我已经搜索了类似的声明,但我似乎无法找到它或弄清楚它的作用.
当我把它放入SML/NJ时,我得到这个:
- type memory = string -> int;
type memory = string -> int
Run Code Online (Sandbox Code Playgroud)
memory它不是一个函数,它只是一个类型的缩写,它是一个函数,它将字符串作为输入并返回一个int.因此,无论何时你想写一些类型的东西,string->int你都可以写出它的类型memory.
例如,而不是写:
- fun foo(f : string->int, s) = f s;
val foo = fn : (string -> int) * string -> int
Run Code Online (Sandbox Code Playgroud)
你可以写:
- fun foo( f: memory, s) = f s;
val foo = fn : memory * string -> int
Run Code Online (Sandbox Code Playgroud)
这样的type声明可以使你的代码更易读(例如,而不是写一对x的类型是int*int一样(x: int*int),你可以创建一个缩写type pair = int*int,然后你可以写x的类型是pair这样的(x: pair)).