如何解决如何在Ocaml的对象中使用另一个val定义一个val?
class my_object =
object (self)
val a = (* a lot of computation *)
val b = (* use the result of a *)
end
对于Ocaml中的此代码段,我知道我可以用一种方法来做到这一点,例如将b定义为可变的并在方法中对其进行计算。但这不是一种简洁的方法,因为我需要在某个地方调用该方法。我能以更好的方式做到这一点吗?
解决方法
您可以在class
声明和object
定义之间定义局部变量,如
class my_object =
let my_a = (* a lot of computation *) in
let my_b = (* uses my_a *) in
object(self)
val a = my_a
val b = my_b
end;;
请注意,使用这样的定义,my_a
和my_b
的评估将在类定义本身处进行一次。如果您想为每个实例重做计算(例如,因为它取决于可变状态),只需在该类中添加一个单位参数:
class my_object () =
let my_a = (* a lot of computation *) in
let my_b = (* uses my_a *) in
object(self)
val a = my_a
val b = my_b
end;;
在这种情况下,实例将由new my_object ()
创建。当然,您可以使用任何数量和类型的参数(包括对计算a
或b
有用的参数)来代替()
。
一种可能是在初始化程序中设置b的值:
class my_object =
object(self)
val a = 14
val mutable b = 0
initializer b <- a + 10
end
这避免了必须记住从类外部的某个地方调用方法。
您还可以预先计算a
和b
的值,并在创建类的新实例时指定它们。这将使它们不可变。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。