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
基本ocamloop问题_Oop_Ocaml - Fatal编程技术网

基本ocamloop问题

基本ocamloop问题,oop,ocaml,Oop,Ocaml,我正在尝试学习oCaml,我对以下程序无效的原因有疑问 class myClass2 = object method doSomething = Printf.printf "%s\n" "Doing something" end;; class myClass foo = object val dMember = foo method doIt = dMember#doSomething end;; let mc2 = new myClass2;; let mc = new myCl

我正在尝试学习oCaml,我对以下程序无效的原因有疑问

class myClass2 =
object
 method doSomething = Printf.printf "%s\n" "Doing something"
end;;

class myClass foo =
object
 val dMember = foo
 method doIt = dMember#doSomething
end;;

let mc2 = new myClass2;;
let mc = new myClass mc2;;
mc#doIt;;
我在尝试编译程序时收到的错误是:

File "sample.ml", line 6, characters 5-84:
Some type variables are unbound in this type:
  class myClass :
    (< doSomething : 'b; .. > as 'a) ->
    object val dMember : 'a method doIt : 'b end
The method doIt has type 'a where 'a is unbound
这是无效的。非常感谢任何(我指的是任何)帮助。

声明类型:

class myClass (foo:myClass2) =

OCaml对象的签名中不能有自由类型变量。由于未完全指定参数
foo
的类型,因此需要通过
foo
类型中的自由变量参数化
myClass

class ['a] myClass foo =
object
 val dMember = foo
 method doIt : 'a = dMember#doSomething
end;;
# let x = new myClass (new myClass2);; 
val x : unit myClass = <obj>
# x#doIt ;;
Doing something
- : unit = ()
此定义具有以下类型:

class ['a] myClass :
  (< doSomething : 'a; .. > as 'b) ->
  object val dMember : 'b method doIt : 'a end

这难道不会破坏在myClass.doIt方法中使用结构类型的目的吗?
# let x = new myClass (new myClass2);; 
val x : unit myClass = <obj>
# x#doIt ;;
Doing something
- : unit = ()