我想使用Erlang来确定传递给函数的变量是否可以被数字整除。我考虑过使用case
来做这件事,但解决方案却让我望而却步。 case
是否适合这份工作?
示例:将数字传递给函数f()。如果该数字可被10整除,则打印一个语句。如果它可被15整除,则打印不同的语句。如果它可以被5整除,我想我想打印第三个陈述,但不是“可以被10整除”或“可以被15整除”的陈述,因为案件已经处理完毕。
我的直觉告诉我case
适合这份工作,但我是Erlang的新手并且在将它拼凑在一起时遇到了麻烦。
答案 0 :(得分:4)
您可以在函数子句中使用警卫执行此操作:
f(N) when N rem 10 =:= 0 ->
io:format("divisible by 10~n");
f(N) when N rem 15 =:= 0 ->
io:format("divisible by 15~n");
f(N) when N rem 5 =:= 0 ->
io:format("divisible by 5~n").
或者您可以使用if
表达式执行此操作:
f(N) ->
if N rem 10 =:= 0 ->
io:format("divisible by 10~n");
N rem 15 =:= 0 ->
io:format("divisible by 15~n");
N rem 5 =:= 0 ->
io:format("divisible by 5~n")
end.
如果您从其他地方获取号码,使用case
表达式可能更为自然:
f() ->
case get_number() of
N when N rem 10 =:= 0 ->
io:format("divisible by 10~n");
N when N rem 15 =:= 0 ->
io:format("divisible by 15~n");
N when N rem 5 =:= 0 ->
io:format("divisible by 5~n")
end.
请注意,如果数字不能被5整除,所有这些表达式都会崩溃。这在Erlang中通常被认为是好的风格:如果你的函数在输入错误时无法做任何事情,那么让它崩溃会更好并让调用者处理错误,而不是使代码复杂化,并在每个级别上处理错误。当然,这取决于您的具体要求。