我是ML的新手,并且拥有一个接收特殊预定义数据类型的函数,并且能够引用其整个参数数据类型,而不是其组件。
这是一个愚蠢的例子:
datatype frame = Frame of string list * string list
(* Type: fn : string * frame -> frame *)
val lookup_variable_value_in_frame =
fn (string(var), Frame(variables, values)) =>
...
Frame(variables, values)
... ;
1)我想返回给定的帧。我必须建立另一个Frame
吗?
2)我希望将给定的帧传递给另一个函数,我必须再次提供一个新的Frame(variables, values)
吗?
我希望我能写出这样的东西:
val lookup_variable_value_in_frame =
fn (string(var), frame : Frame(variables, values)) => ...
然后我将能够使用框架或其组件。
谢谢。
答案 0 :(得分:2)
您的数据类型已有名称frame
。您不必为返回或传递给另一个函数而构建另一个frame
。第一个选项是使用显式类型注释:
(* Type: fn : string * frame -> frame *)
val lookup_variable_value_in_frame =
fn (var: string, f: frame) =>
...
f
... ;
此选项并不常见,只有当您需要的类型不是类型检查器推断的类型时,才应使用此选项。另一种选择是使用as
关键字进行另一个绑定值:
val lookup_variable_value_in_frame =
fn (var, f as Frame(variables, values)) =>
...(* using f, variables or values here *)
请注意,SML中没有string(var)
这样的内容,可以使用var
或var: string
进行显式类型注释。