在 F# 中,"Expecting" 和 "Given" 之间的类型不匹配错误是什么意思?
In F#, what does error of type mismatch between "Expecting" and "Given" mean?
我在使用 Binding.subModelSelectedItem() 时收到以下错误:
FS0001: Type mismatch. Expecting a 'string -> Binding<(Model * 'a), b>'
but given a
'string -> Binding<Model,Msg>'.
The type 'Model * 'a' does not match the type 'Model'
来自以下 F# 代码:
type Msg =
| SetAppointmentKey of int option
然后,在绑定中:
"SelectedAppointmentKey" |> Binding.subModelSelectedItem("AppointmentKeys", (fun m -> m.SelectedAppointmentKey), SetAppointmentKey)
我不明白错误信息。错误信息是什么意思?向谁“期待”?从什么“给予”?
抱歉我的无知,但是这个新手尝试的任何东西都没有解决这个问题。
感谢您的帮助。
TIA
我不确定您的代码中的具体错误在哪里,但我可以尝试帮助您理解错误消息的内容。一个简单的例子来说明同样的错误:
let foo (f:int -> int) = ()
let bar x = ""
foo bar
这不起作用,因为 foo
需要一个函数 int -> int
,但是 bar
return 是一个 string
。你得到:
error FS0001: Type mismatch. Expecting a int -> int
but given a
int -> string
The type int
does not match the type string
错误消息告诉您用作参数的函数类型错误。它会告诉您这两种类型以及它的一部分出错的地方(这里,return 类型不匹配)。
查看您的错误信息:
FS0001: Type mismatch. Expecting a string -> Binding<(Model * 'a), 'b>
but given a
string -> Binding<Model,Msg>
.
The type Model * 'a
does not match the type Model
您似乎在某个地方创建了一个函数,该函数接受一个字符串并且 return 是一个 Binding
。这个函数应该 return 一个 Binding
并且 Model
作为第一个类型参数,但是你的代码 return 是一个由 Model
和其他东西组成的元组。
如果您的代码中有 fun x -> ..., something
,可能很容易发生这种情况,也许是在您想要 (fun x -> ...), something
的地方。如果你这样写,你会得到类似的错误,例如:
let foo (f:int -> int) = ()
let bar = fun x -> 0, 1
foo bar
我在使用 Binding.subModelSelectedItem() 时收到以下错误:
FS0001: Type mismatch. Expecting a 'string -> Binding<(Model * 'a), b>'
but given a
'string -> Binding<Model,Msg>'.
The type 'Model * 'a' does not match the type 'Model'
来自以下 F# 代码:
type Msg =
| SetAppointmentKey of int option
然后,在绑定中:
"SelectedAppointmentKey" |> Binding.subModelSelectedItem("AppointmentKeys", (fun m -> m.SelectedAppointmentKey), SetAppointmentKey)
我不明白错误信息。错误信息是什么意思?向谁“期待”?从什么“给予”?
抱歉我的无知,但是这个新手尝试的任何东西都没有解决这个问题。
感谢您的帮助。
TIA
我不确定您的代码中的具体错误在哪里,但我可以尝试帮助您理解错误消息的内容。一个简单的例子来说明同样的错误:
let foo (f:int -> int) = ()
let bar x = ""
foo bar
这不起作用,因为 foo
需要一个函数 int -> int
,但是 bar
return 是一个 string
。你得到:
error FS0001: Type mismatch. Expecting a
int -> int
but given aint -> string
The typeint
does not match the typestring
错误消息告诉您用作参数的函数类型错误。它会告诉您这两种类型以及它的一部分出错的地方(这里,return 类型不匹配)。
查看您的错误信息:
FS0001: Type mismatch. Expecting a
string -> Binding<(Model * 'a), 'b>
but given astring -> Binding<Model,Msg>
. The typeModel * 'a
does not match the typeModel
您似乎在某个地方创建了一个函数,该函数接受一个字符串并且 return 是一个 Binding
。这个函数应该 return 一个 Binding
并且 Model
作为第一个类型参数,但是你的代码 return 是一个由 Model
和其他东西组成的元组。
如果您的代码中有 fun x -> ..., something
,可能很容易发生这种情况,也许是在您想要 (fun x -> ...), something
的地方。如果你这样写,你会得到类似的错误,例如:
let foo (f:int -> int) = ()
let bar = fun x -> 0, 1
foo bar