问题描述
(我是F#的新手)。我在F#中具有以下定义:
init i j =
{ Id = Guid.NewGuid ()
InnerRows = [0 .. 2] |> List.map (Cell.init i j)
SelectedInnerRow = None}
let update msg m =
match msg with
| Select id -> { m with SelectedInnerRow = id }
| Reset -> init
其中更新功能在“重置->初始化”上显示以下错误: 模式匹配表达式的所有分支必须返回与第一个分支(此处为“模型”)相同类型的值。该分支返回类型为'a->'b-> Model'
的值“ a->'b->模型”是什么意思,如何解决?
谢谢。
TIA
解决方法
错误消息指出:模式匹配的所有分支必须返回相同类型的值
您的Select id -> ...
分支返回类型为Model
的值
您的Result -> init
分支返回函数init
,其类型为'a -> 'b -> Model
-也就是说,它接受某些类型为'a
和'b
的两个参数,并且返回Model
。
类型不匹配。不同种类。看到了吗?
从语义上讲,我猜想您真正想要返回的update
函数是Model
。如果是这样,则需要为init
函数提供两个参数,以便它返回一个Model
,这可以是模式匹配表达式的第二个分支的结果:
| Result -> init 0 0
注意:我只是猜测,在这种情况下,我实际上不确定0 0
是否正确。在不知道Cell.init i j
的工作以及期望的参数类型的情况下,无法知道它们应该是什么。
您必须在这里找出实际的参数init
并传递给他们。