jef*_*eon 9 erlang functional-programming
我有一个函数,其中我有一系列单独的case语句.
case ... of
...
end,
case ... of
...
end,
...
Run Code Online (Sandbox Code Playgroud)
等等
我希望在其中一个case语句中发生特定情况条件时立即从函数返回 - 这样就不会检查下一个case语句,并且函数只退出/返回.我怎么做?
jld*_*ont 15
我建议你重构利用Erlang的全部功能及其模式匹配能力.
没有return运营商.另外,一个鲜为人知的事实是你可以做一些事情:
Return=case ... of
一个case语句可以有"回报"的价值.
Ala*_*ore 12
模式匹配是重构case语句的好方法 - 你可以做这样的事情
testcase(1, X, Y) -> .... passed1;
testcase(2, X, Y) -> .... passed2;
testcase(N, X, Y) when N > 2 -> .... passedlarge;
testcase(_, X, Y) -> defaultcase.
Run Code Online (Sandbox Code Playgroud)
然后你的案例陈述简单地包含:
X = testcase(Number, Param1, Param2).
Run Code Online (Sandbox Code Playgroud)
(在这个人为的例子中,X将被传递1,传递2,传递大小或默认大小)
Erlang 没有return运算符。您需要将代码重构为更小的函数。
您的原始代码有两个用逗号运算符链接的 case 表达式。我认为您在要保留的第一个 case 表达式中有一些副作用。下面,我使用了一个虚return运算符:
case ... of
P1 -> return E1;
P2 -> E2;
end,
case ... of
...
end
Run Code Online (Sandbox Code Playgroud)
可以使用小函数和模式匹配将这样的表达式转换为真正的 Erlang 代码,如下所示:
case1(P1, ...) -> E1;
case1(P2, ...) -> E2, case2(...).
case2(...) -> ...
Run Code Online (Sandbox Code Playgroud)
免责声明:我写 Erlang 代码已经有 10 年了,所以我的语法可能是错误的。