我在OCaml toplevel中收到这个奇怪的语法错误。
# #use "ex_8_4.ml";;
type blob = {
get : unit -> float * float;
area : unit -> float;
set : float * float -> unit;
move : float * float -> unit;
}
val new_rectangle : float -> float -> float -> float -> blob = <fun>
# let rect1 = new_rectangle 0.0 0.0 1.0 1.0 in
let rect2 = {rect1 with set = (fun _ -> ())};;
Error: Syntax error
复制未能包括错误中用分号加下划线。
答案 0 :(得分:5)
之所以会发生这种情况,是因为顶层需要in
个关键字而不是分号:
> let a = 1 in let b = 2;;
Error: Syntax error
一种解决方法是在最后添加in
:
> let a = 1 in let b = 2 in a + b;;
- : int = 3
但最简单的方法是结束每个让分号绑定:
> let a = 1;;
val a : int = 1
> let b = 2;;
val b : int = 2
> a + b;;
- : int = 3
答案 1 :(得分:0)
IonuţG。Stan的答案是正确的,如果您想要定义rect1
以供将来使用,或者您不介意它已定义。如果您希望在定义rect1
时仅定义本地用rect2
,则可以使用此方法:
# type ints = {a : int; b : int};;
(* type ints = { a : int; b : int; } *)
# let y =
let x = {a = 1; b = 2} in
{x with b = 5};;
(* val y : ints = {a = 1; b = 5} *)
# x;;
(* Error: Unbound value x *)