Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 用于将自定义对象作为参数传入的OCaml语法_Oop_Syntax_Ocaml - Fatal编程技术网

Oop 用于将自定义对象作为参数传入的OCaml语法

Oop 用于将自定义对象作为参数传入的OCaml语法,oop,syntax,ocaml,Oop,Syntax,Ocaml,我试图掌握OCaml语言语法,但在应用一些OOP结构时遇到了一些问题。下面代码的目标是拥有一个从虚拟类foo继承的类栏。虚拟类包含三个虚拟方法,我希望将“player”对象的实例作为参数。当我编译下面的代码时,我得到了一个错误:方法doThis的类型为'a->'b,但预期的类型为player。这意味着什么(记住,我是新手),我该如何着手纠正它 谢谢 class player = object end;; class virtual foo = object (self) method vi

我试图掌握OCaml语言语法,但在应用一些OOP结构时遇到了一些问题。下面代码的目标是拥有一个从虚拟类foo继承的类栏。虚拟类包含三个虚拟方法,我希望将“player”对象的实例作为参数。当我编译下面的代码时,我得到了一个错误:方法doThis的类型为'a->'b,但预期的类型为player。这意味着什么(记住,我是新手),我该如何着手纠正它

谢谢

class player =
object

end;;

class virtual foo =
object (self)
 method virtual doThis : player
 method virtual doThat : player
 method virtual notifyAll : player array
end;;

class bar (playersIn: player array) =
object (self)
 inherit foo
 method doThis (p:player) = Printf.printf "%s\n" "This!"
 method doThat (p:player) = Printf.printf "%s\n" "That!"
 method notifyAll (p:player array) = Printf.printf "%s\n" "Notifying!"
end;;
(我不知道OCaml,但我知道F#,它们很相似,所以希望我猜对了。)

试着改变

method virtual doThis : player 
method virtual doThat : player 
method virtual notifyAll : player array


我相信前面的答案是正确的:所讨论的方法需要它们的类型是返回单元的函数

另一条更一般的建议是:不要从学习对象系统开始学习OCaml。OCaml中的对象可能很有用,但真正想使用对象编程的情况很少。在掌握好核心语言之前,您将无法理解OCaml的对象系统。重点介绍如何使用基本代数数据类型(变量、元组、记录)、普通参数多态性(与多态变量和对象的子类型相反)和模块(但不是函子)解决问题


在使用对象之前,先了解这些基本工具。使用其他语言的对象可以解决的大多数问题在没有它们的OCaml中都能得到最好的解决。

在这种情况下,听起来像是您最初将它们定义为“值”或“属性”,而->单元使其具有函数类型(将播放器作为参数,不返回结果)。
method virtual doThis : player -> unit
method virtual doThat : player -> unit
method virtual notifyAll : player array -> unit