因为我只找到了关于这个错误的日语页面,所以我想,让我们把它记录下来并在这里提问,因为我的日语有点生疏了。
如果我有以下 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"
抛出:错误 FS0722:只有返回一个结果的活动模式才能接受参数
我可以通过将其转换为两个单例参数化活动模式来解决它,每个模式都返回 None/Some(x),但我仍然想知道为什么我不允许这样做和/或是否有我可以使用的语法不知道。我也想知道为什么它可以编译,但我不能使用它?