gpt4 book ai didi

compiler-errors - 返回错误 FS0722 的多情况参数化事件模式仅返回一个结果的事件模式可以接受参数

转载 作者:行者123 更新时间:2023-12-04 23:45:10 25 4
gpt4 key购买 nike

因为我只找到了关于这个错误的日语页面,所以我想,让我们记录下来并在这里提问,因为我的日语有点生疏。

如果我有以下 FSharp 事件模式(简化示例):

let (|InRange|OutOfRange|) from too =
function
| input when input >= from && input <= too -> InRange
| _ -> OutOfRange

它完美编译并显示其类型为:
val ( |InRange|OutOfRange| ) :
from:'a -> too:'a -> _arg1:'a -> Choice<unit,unit> when 'a : comparison

但是当我尝试使用它时,即如下所示,它会引发错误:
let test i = match i with
| InRange 10 20 -> "in range"
| _ -> "out of range"

Throws: error FS0722: Only active patterns returning exactly one result may accept arguments



我可以通过将其转换为两个单例参数化事件模式来解决它,每个模式都返回 None/Some(x),但我仍然想知道为什么我不允许这样做和/或是否有我可以使用的语法不知道。我也想知道为什么它可以编译,但我不能使用它?

最佳答案

最简单的解决方案是将其重构为 partial active pattern :

let (|InRangeInclusive|_|) lo hi x =
if lo <= x && x <= hi then Some () else None

然后你甚至可以将它们组合成这样:
let test i = match i with
| InRangeInclusive 10 20 -> "in first range"
| InRangeInclusive 42 100 -> "in second range"
| _ -> "out of range"

请注意,我冒昧地为该模式命名了一个更好的名称,因为那些使用您的代码的人可能会对它的行为与极端情况感到困惑。

I'm still wondering why I am not allowed doing so?



Why can't non-partial active patterns be parameterized in F#?

关于compiler-errors - 返回错误 FS0722 的多情况参数化事件模式仅返回一个结果的事件模式可以接受参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30282711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com