我正在阅读" 真实世界OCaml"一书,并且从该书的代码中得到了错误.既然,我没有在GitHub看到任何关于图书问题的活动,我想在这里问你.这是问题cobe:
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时间
ivg.. 11
在较旧版本的Core库中,该to_sec_string
函数具有以下接口:
(** [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
,但第二个是指定时区的带标签的类型参数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中的大多数类型都有接口to_string
函数.因此,更容易的解决方法是使用它,而不是to_sec_string
.它有一点点不同和更详细的格式,但是:
Time.to_string time ^ " -- " ^ message
senior_pimie.. 5
我在GitHub上找到了关于该问题的讨论
解决方案是添加:
Time.to_sec_string ~zone:Core.Zone.local (time) ^ " -- " ^ message
虽然,我不明白它是如何工作的.
在较旧版本的Core库中,该to_sec_string
函数具有以下接口:
(** [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
,但第二个是指定时区的带标签的类型参数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中的大多数类型都有接口to_string
函数.因此,更容易的解决方法是使用它,而不是to_sec_string
.它有一点点不同和更详细的格式,但是:
Time.to_string time ^ " -- " ^ message
我在GitHub上找到了关于该问题的讨论
解决方案是添加:
Time.to_sec_string ~zone:Core.Zone.local (time) ^ " -- " ^ message
虽然,我不明白它是如何工作的.