在 F# 中,如何修复值类型为“a->'b->Model' 的模式匹配错误
In F#, how to fix a pattern match error with value type "a->'b->Model'
(我是 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
更新函数在“重置 -> 初始化”中显示以下错误:
模式匹配表达式的所有分支必须 return 与第一个分支具有相同类型的值,这里是 'Model'。此分支 returns 类型为 ''a 的值 -> 'b -> Model'
''a -> 'b -> Model' 是什么意思,如何解决?
谢谢。
TIA
如错误消息所述:模式匹配的所有分支必须 return 相同类型的值
您的 Select id -> ...
分支 return 是 Model
类型的值
您的 Result -> init
分支 return 是函数 init
,其类型为 'a -> 'b -> Model
- 也就是说,它采用某些类型的两个参数 'a
'b
和 return 一个 Model
.
类型不匹配。不同种类。看到了吗?
从语义上,我猜测您真正想要 return 的update
函数是Model
。如果是这样,你需要给 init
函数它的两个参数,这样它 return 就是你的 Model
,这可以是 [=44] 的第二个分支的结果=]表达式:
| Result -> init 0 0
注意:在这种情况下,我实际上不确定 0 0
是正确的参数,我只是在猜测。如果不知道 Cell.init i j
做了什么以及它期望的参数类型,就无法知道它们应该是什么。
你必须弄清楚 init
这里需要的实际参数并将它们传入。
(我是 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
更新函数在“重置 -> 初始化”中显示以下错误: 模式匹配表达式的所有分支必须 return 与第一个分支具有相同类型的值,这里是 'Model'。此分支 returns 类型为 ''a 的值 -> 'b -> Model'
''a -> 'b -> Model' 是什么意思,如何解决?
谢谢。
TIA
如错误消息所述:模式匹配的所有分支必须 return 相同类型的值
您的 Select id -> ...
分支 return 是 Model
您的 Result -> init
分支 return 是函数 init
,其类型为 'a -> 'b -> Model
- 也就是说,它采用某些类型的两个参数 'a
'b
和 return 一个 Model
.
类型不匹配。不同种类。看到了吗?
从语义上,我猜测您真正想要 return 的update
函数是Model
。如果是这样,你需要给 init
函数它的两个参数,这样它 return 就是你的 Model
,这可以是 [=44] 的第二个分支的结果=]表达式:
| Result -> init 0 0
注意:在这种情况下,我实际上不确定 0 0
是正确的参数,我只是在猜测。如果不知道 Cell.init i j
做了什么以及它期望的参数类型,就无法知道它们应该是什么。
你必须弄清楚 init
这里需要的实际参数并将它们传入。