gpt4 book ai didi

function - 在不使用类的情况下在 OCaml 中隐藏函数参数

转载 作者:行者123 更新时间:2023-12-01 10:47:59 26 4
gpt4 key购买 nike

我是 OCaml 初学者,所以这个问题可能很简单。我有一些这样的功能:

let rec
f1 <list of args> state = ...
and
f2 <list of args> state = ...
and
f3 <list of args> state = ...
and
f4 <list of args> state = ...
;;

这些函数中的每一个都以最后一个参数作为状态调用其他函数。因此,对于每个执行“树”,状态是一种全局只读变量。我如何以抽象出状态但函数可以访问它的方式来模拟它。请注意,我不想使用 OCaml 类,涉及模块/子模块/仿函数的解决方案会很好!

最佳答案

let share state = 
let rec f1 ... = ... you can use state freely here ...
and f2 ... = ... same here ...
and f3 ... = ... same here ...
and f4 ... = ... same here ...
in
f1, f2, f3, f4

let state = ...
let f1, f2, f3, f4 = share state

如果您希望“state”成为一个模块,例如:

module type S = sig ... end

let share m =
let module M = (val m : S) in
let rec f1 ... = ... use M at will ...
and f2 ... = ... use M at will ...
and f3 ... = ... use M at will ...
and f4 ... = ... use M at will ...
in
f1, f2, f3, f4


module M : S = struct ... end

let f1, f2, f3, f4 = share (module M)

如果你想将生成的 fi 打包到一个模块中,那么使用一个仿函数

module type S = sig  
val f1 : ...
val f2 : ...
val f3 : ...
val f4 : ...
end

module type State : sig ... end

module Make (M : State) : S = struct
let rec f1 ... = ... use M at will here ...
and f2 ... = ... again ...
and f3 ... = ... again ...
and f4 ... = ... again ...
end

module State : State = struct ... implement state... end
module Instance = Make (State)

let () = Instance.f1 ()...

关于function - 在不使用类的情况下在 OCaml 中隐藏函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23542089/

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