Ala*_*yne 1 f# pattern-matching
(我是 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
Run Code Online (Sandbox Code Playgroud)
其中更新函数在“重置 -> 初始化”上显示以下错误: 模式匹配表达式的所有分支必须返回与第一个分支相同类型的值,其中此处为“模型”。该分支返回类型为 ''a -> 'b -> Model' 的值
“a -> 'b -> Model”是什么意思,如何解决这个问题?
谢谢。
TIA
正如错误消息所示:模式匹配的所有分支必须返回相同类型的值
你的Select id -> ...分支返回一个类型的值Model
您的Result -> init分支返回 function init,它具有类型'a -> 'b -> Model- 也就是说,它接受某些类型的两个参数'a和'b返回 a Model。
类型不匹配。不同种类。看?
从语义来看,我猜测您真正希望函数update返回的是Model. 如果是这样,您需要为init函数提供两个参数,以便它返回一个Model,这可以是模式匹配表达式的第二个分支的结果:
| Result -> init 0 0
Run Code Online (Sandbox Code Playgroud)
注意:我实际上不确定0 0这种情况下的参数是否正确,我只是猜测。如果不知道它们的Cell.init i j作用以及它期望什么类型的参数,就无法知道它们应该是什么。
你必须弄清楚init这里实际的参数需要什么并将它们传递进去。
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |