在 OCaml 中指定记录字段的类型
Specify type of record field in OCaml
我有这个代码
class person name_init =
object
val name = name_init
method get_name = name
end;;
let p1 = new person "Steven"
and p2 = new person "John" in
print_endline p1#get_name;
print_endline p2#get_name;;
它抱怨我的 person 对象中的 get_name 和 val name 是未绑定类型,我意识到这是准确的。我如何指定 name_init(因此名称和 get_name)是 OCaml 中的字符串类型?
像这样指定函数(包括构造函数)的参数类型:
class person (name_init : string) =
…
如果您有多个参数,请将它们全部放在括号中。
OCaml 要求 class
表达式中的所有值要么是具体的,要么绑定到一个类型参数。因此,当类型系统推断出您的表达式的类型是多态的时,您需要对其进行一些处理。您有两个选择:
- 具有特定类型的约束表达式
- 限制表达式的类型等于类型参数。
在第一种情况下,约束可以放在 class 表达式内的任何位置,前提是此约束不允许多态表达式转义 class 表达式。几个例子来证明这个想法:
约束实例变量规范:
class person name_init =
object
val name : string = name_init
method get_name = name
end
在方法规范处约束:
class person name_init =
object
val name = name_init
method get_name : string = name
end
在你的例子中,我们还有两个地方可以放置约束,但我认为这个想法很清楚。
我有这个代码
class person name_init =
object
val name = name_init
method get_name = name
end;;
let p1 = new person "Steven"
and p2 = new person "John" in
print_endline p1#get_name;
print_endline p2#get_name;;
它抱怨我的 person 对象中的 get_name 和 val name 是未绑定类型,我意识到这是准确的。我如何指定 name_init(因此名称和 get_name)是 OCaml 中的字符串类型?
像这样指定函数(包括构造函数)的参数类型:
class person (name_init : string) =
…
如果您有多个参数,请将它们全部放在括号中。
OCaml 要求 class
表达式中的所有值要么是具体的,要么绑定到一个类型参数。因此,当类型系统推断出您的表达式的类型是多态的时,您需要对其进行一些处理。您有两个选择:
- 具有特定类型的约束表达式
- 限制表达式的类型等于类型参数。
在第一种情况下,约束可以放在 class 表达式内的任何位置,前提是此约束不允许多态表达式转义 class 表达式。几个例子来证明这个想法:
约束实例变量规范:
class person name_init =
object
val name : string = name_init
method get_name = name
end
在方法规范处约束:
class person name_init =
object
val name = name_init
method get_name : string = name
end
在你的例子中,我们还有两个地方可以放置约束,但我认为这个想法很清楚。