Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
f#模式匹配相反的值_F# - Fatal编程技术网

f#模式匹配相反的值

f#模式匹配相反的值,f#,F#,我想要一个简单的函数,它给出相反的值——如果v==v1,则返回v2;如果v==v2,则返回v1。我尝试了以下方法: let oppose v v1 v2 = match v with | v1 -> v2 | v2 -> v1 | _ -> "" 但是,我得到了警告: warning FS0026: This rule will never be matched warning FS0026: This rule will never be m

我想要一个简单的函数,它给出相反的值——如果v==v1,则返回v2;如果v==v2,则返回v1。我尝试了以下方法:

let oppose v v1 v2 =
    match v with
    | v1 -> v2
    | v2 -> v1
    | _ -> ""
但是,我得到了警告:

warning FS0026: This rule will never be matched
warning FS0026: This rule will never be matched
但它并没有像预期的那样工作:

> oppose "a" "a" "b"
val it : string = "b"
> oppose "b" "a" "b"
val it : string = "b"

我希望在第二次通话中得到“a”。我做错了什么?

match子句中使用的名称是分配给结果的名称,而不是对值的检查。您需要明确检查:

let oppose v v1 v2 =
    match v with
    | a when a = v1 -> v2
    | b when b = v2 -> v1
    | _ -> ""
您还可以使用
if
而不是匹配项。如果您正在对照值进行检查,则更易于阅读,如本例所示:

let oppose v v1 v2 =
    if v = v1 then v2
    elif v = v2 then v1
    else ""

也许你应该添加if/elif/else方法,在这种情况下,这比匹配更合适,因为@nafu似乎开始了它的F#旅程?@Sehnsucht;当然;)很简单,谢谢!以前从未被称为“it”: