0

使用 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

4

1 回答 1

2

我不确定您的代码中的具体错误在哪里,但我可以尝试帮助您了解错误消息的内容。一个简单的例子来说明同样的错误:

let foo (f:int -> int) = ()
let bar x = ""
foo bar

这不起作用,因为foo需要一个 function int -> int,但bar返回一个string. 你得到:

错误 FS0001:类型不匹配。期望 aint -> int但给定 a int -> string 类型与类型int不匹配string

错误消息告诉您用作参数的函数类型错误。它会告诉您这两种类型以及其中的一部分出错的地方(这里,返回类型不匹配)。

查看您的错误消息:

FS0001:类型不匹配。期待 astring -> Binding<(Model * 'a), 'b> 但给定 a string -> Binding<Model,Msg>。类型与类型Model * 'a不匹配Model

似乎您正在某处创建一个函数,该函数接受一个字符串并返回一个Binding. 这个函数应该返回一个BindingwithModel作为第一个类型参数,但是你的代码返回一个由Model和其他东西形成的元组。

如果你的代码中有这样的事情很容易发生fun x -> ..., something,也许在你想要的地方(fun x -> ...), something。如果你写,你会得到一个类似的错误,例如:

let foo (f:int -> int) = ()
let bar = fun x -> 0, 1 
foo bar
于 2020-09-27T22:18:11.033 回答