gpt4 book ai didi

oop - 基本的 OCaml OOP 问题

转载 作者:行者123 更新时间:2023-12-01 10:16:22 25 4
gpt4 key购买 nike

我正在尝试学习 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

我特别感兴趣的是为什么:

val dMember = foo
method doIt = dMember#doSomething

无效。感谢任何(我的意思是任何)的帮助。

最佳答案

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

class ['a] myClass foo =
object
val dMember = foo
method doIt : 'a = dMember#doSomething
end;;

这个定义有类型

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

这类似于普通的参数化数据类型,例如 'a tree ('a 周围的括号只是一些语法上的废话)。注意 'afoo#doSomething 的类型, 不属于 foo .

# let x = new myClass (new myClass2);; 
val x : unit myClass = <obj>
# x#doIt ;;
Doing something
- : unit = ()

关于oop - 基本的 OCaml OOP 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/478546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com