如何访问OCaml中的对象字段?

ano*_*nol 6 ocaml

point在OCaml中创建了一个类,它包含一对ints和一个set方法:

# class point (x : int) (y : int) =
  object
    val mutable x = x
    val mutable y = y
    method set x' y' = x <- x'; y  <- y'
  end;;

class point : 
  int -> 
  int -> 
  object 
    val mutable x : int 
    val mutable y : int 
    method set : int -> int -> unit
  end
Run Code Online (Sandbox Code Playgroud)

然后我实例化了一个观点:

# let p = new point 1 2;;

val p : point = <obj>
Run Code Online (Sandbox Code Playgroud)

但我无法访问其字段:

# p#x;;
Error: This expression has type point
       It has no method x

# p.x;;
Error: Unbound record field x
Run Code Online (Sandbox Code Playgroud)

如何访问对象的字段?

请注意,OCaml手册确实提到了私有方法,但没有提到字段是私有还是公共字段.并且,与私有方法不同,字段确实出现在类签名中,就好像它们是公共的一样.

Jef*_*eld 9

对象的字段是私有的.您需要公开一个访问器方法以从外部访问它们.