在F#中,可以匹配表达式';跌破';另一场比赛?就像在C#或C++;? 在C++中,您可以切换到/case构造,省略case语句中的中断,使下一个case执行失败。

在F#中,可以匹配表达式';跌破';另一场比赛?就像在C#或C++;? 在C++中,您可以切换到/case构造,省略case语句中的中断,使下一个case执行失败。,f#,switch-statement,F#,Switch Statement,在C#中,这是在goto情况下完成的 这可以用F#完成吗 一个C#示例来说明: switch (a) case "a": ... break; case "b": ... goto case "a" case "c": ... 我会想象这样的情况: match x with | "a" -> ... | "b" -> ... + goto "a" 一个实际例子是: “a”执行一些操作 “b”重置计数器,然后执行与“a”相同的操作 您希

在C#中,这是在goto情况下完成的

这可以用F#完成吗

一个C#示例来说明:

switch (a)
case "a":
    ...
    break;
case "b":
    ...
    goto case "a"
case "c":
    ...
我会想象这样的情况:

match x with
| "a" -> ...
| "b" -> ...  + goto "a"
一个实际例子是:

  • “a”执行一些操作
  • “b”重置计数器,然后执行与“a”相同的操作
您希望避免代码重复,但也希望将代码放在外部函数中。

F#是一种基于表达式的语言,因此它没有必要的功能,如
goto
。 但是,您仍然可以表达相同的逻辑。首先,你可以结合“案例”:

let test str=
匹配str
|(null |“”)->printf“空”
|str->printf“字符串:[%s]”str
当然,如果您只想重用某些案例逻辑的一部分,可以在本地函数中提取:

let test str=
让onEmpty()=printf“empty!!!”
匹配str
|空->
一空
printf“null!”
|“->onEmpty()
|str->printf“字符串[%s]”str
或者像这样,哪一个更适合你的情况

let abFun() = 
     aFun() |> ignore
     bFun()
F#限制你做更实用的事情<代码>转到是命令式运算符

match x with
| "a" -> aFun()
| "b" -> abFun()

谢天谢地,你在F#afaik没有
goto
。。。但不确定为什么您需要这样做,只需将“a”的整个操作包装成一个函数,然后从
b
调用您需要调用的任何东西,再加上a的函数。
match x with
| "a" -> aFun()
| "b" -> abFun()