【发布时间】:2014-01-18 12:39:15
【问题描述】:
我无法解释自己的 OCaml 编译器问题。以下代码无法编译:
open Postgresql
let get_nodes conn =
ignore (conn#exec "SELECT * FROM node_full")
let () =
let c = new connection () in
ignore (get_nodes c)
它给出以下错误:
File "test.ml", line 8, characters 20-21:
Error: This expression has type Postgresql.connection
but an expression was expected of type < exec : string -> 'a; .. >
Types for method exec are incompatible
(第8行是最后一行)
但以下代码编译没有错误(并且在完整版代码中按预期工作):
open Postgresql
let get_nodes (conn:connection) =
ignore (conn#exec "SELECT * FROM node_full")
let () =
let c = new connection () in
ignore (get_nodes c)
唯一不同的是我在get_nodes函数中指定了conn参数的类型。
有人了解这里发生了什么吗?这是我第一次必须自己指定类型才能使代码正常工作,而且我是 OCaml 的日常用户...
另外,我没有看到,在错误信息中,为什么涉及的类型不兼容,这里是exec函数的类型:
method exec :
?expect:Postgresql.result_status list ->
?params:string array ->
?binary_params:bool array ->
string -> Postgresql.result
以及来自 Postgresql.result 的 get_all 函数的类型:
method get_all : string array array
新年快乐!
【问题讨论】:
标签: ocaml