Tho*_*mas 2 f# switch-statement
在 C++ 中,您可以使用 switch / case 构造并省略 case 语句中的 break 以使执行在下一个 case 中失败。
在 C# 中,这是通过 goto 案例完成的。
这可以在 F# 中完成吗?
AC#示例来说明:
switch (a)
case "a":
...
break;
case "b":
...
goto case "a"
case "c":
...
Run Code Online (Sandbox Code Playgroud)
我会想象这样的事情:
match x with
| "a" -> ...
| "b" -> ... + goto "a"
Run Code Online (Sandbox Code Playgroud)
一个实际的例子是这样的情况:
并且您希望避免代码重复,但也希望将代码放在外部函数中。
F# 是一种基于表达式的语言,因此它没有像goto. 但是,您仍然可以表达相同的逻辑。首先,您可以组合“案例”:
let test str =
match str with
| (null|"") -> printf "empty"
| str -> printf "String: [%s]" str
Run Code Online (Sandbox Code Playgroud)
当然,如果您只想重用某些 case 逻辑的一部分,您可以在本地函数中提取它:
let test str =
let onEmpty() = printf "empty!!!"
match str with
| null ->
onEmpty()
printf "null!"
| "" -> onEmpty()
| str -> printf "String [%s]" str
Run Code Online (Sandbox Code Playgroud)