我从mirageOS github repo中修改了以下代码块:
open Lwt.Infix
module Main (KV: Mirage_kv.RO) = struct
let start kv =
let read_from_file kv =
KV.get kv (Mirage_kv.Key.v "secret") >|= function
| Error e ->
Logs.warn (fun f -> f "Could not compare the secret against a known constant: %a"
KV.pp_error e)
| Ok stored_secret ->
Logs.info (fun f -> f "Data -> %a" Format.pp_print_string stored_secret);
in
read_from_file kv
end
该代码从一个名为";秘密";并输出一次我想在睡眠的情况下不断地读取文件并从中输出
用例是这样的:当这个程序运行时,我会用其他进程更新secret
文件,所以我希望看到输出中的更改。
我试过什么
我试着把最后一句话放在的while循环中
in
while true do
read_from_file kv
done
但它给出了错误此表达式的类型单位为Lwt.t,但由于表达式位于while循环的主体中,因此应为类型单位的表达式。
我只知道lwt是一个线程库,但我不是ocaml开发人员,也不想成为其中之一(我对MirageOS感兴趣(,所以我找不到编写它的函数语法。
您需要将循环写成一个函数。例如
let rec loop () =
read_from_file kv >>= fun () ->
(* wait here? *)
loop ()
in
loop ()