gpt4 book ai didi

ocaml - 将时间转换为秒字符串问题

转载 作者:行者123 更新时间:2023-12-02 01:07:15 24 4
gpt4 key购买 nike

我正在阅读《Real World OCaml》一书,并且该书中的代码出现错误。由于我在 GitHub 上没有看到任何有关图书问题的事件,所以我想在这里向您询问。这是问题所在:

let log_entry maybe_time message =
let time = match maybe_time with
| Some x -> x
| None -> Time.now ()
in
Time.to_sec_string time ^ " -- " ^ message
;;

错误是下一个:

Error: This expression has type zone:Core.Zone.t -> string but an expression was expected of type string

据我了解,这是关于调用

Time.to_sec_string time

最佳答案

在旧版本的 Core 库中,to_sec_string 函数具有以下接口(interface):

(** [to_sec_string t] Same as to_string, but without milliseconds *)
val to_sec_string : t -> string

在某个时候他们改变了它的界面,现在是

(** Same as [to_string_abs], but without milliseconds *)
val to_sec_string : t -> zone:Zone.t -> string

这意味着,现在这是一个带有两个参数的函数。第一个仍然是 Time.t 类型的值,但第二个是 labeled Zone.t 类型的参数指定时区。与常规位置参数不同,带标签的参数可以传递给任意位置的函数,因此您无需记住参数的顺序。通常的调用如下所示:

let s = Time.to_sec_string time ~zone:Time.Zone.local

其中Time.Zone.local是一个时区对象,代表您的本地时区。由于它是一个带标签的参数,因此您也可以像这样调用该函数:

let s = Time.to_sec_string ~zone:Time.Zone.local time

此外,由于这里的两个参数都有不同的类型,OCaml 甚至可以在不使用标签的情况下猜测谁是谁,因此您可以回退到位置参数:

let s = Time.to_sec_string time Time.Zone.local

最后,Core 中的大多数类型都有接口(interface) to_string 函数。因此,更简单的解决方法是使用它,而不是 to_sec_string。不过,它的格式有点不同且更详细:

Time.to_string time ^ " -- " ^ message

关于ocaml - 将时间转换为秒字符串问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34219020/

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