我在Erlang非常陌生。 我想使功能检查禁令词。
但是我遇到语法错误.. 如何在if else语句中使用try catch?
check_banword(Word, BlackWord) ->
try
Res = string:rstr(Word, BlackWord),
if Res > 0 ->
true;
true ->
false
catch
false
end.
答案 0 :(得分:3)
代码中的两个问题:
end
之后缺少if
经过更改使其能够编译的代码如下
check_banword(Word, BlackWord) ->
try
Res = string:rstr(Word, BlackWord),
if
Res > 0 ->
true;
true ->
false
end
catch
_ -> false
end.
答案 1 :(得分:3)
在这种情况下,您实际上不需要if
,可以将try
与模式和防护一起使用。以这种方式使用时,try
看起来像一个case
表达式,末尾有catch
节。 (请注意,try
和of
之间的部分仅受catch
“保护”-在这种情况下,它没有任何区别,因为其余代码无法引发错误。)
还要注意,您需要指定要捕获的异常类型,error
,exit
和throw
之一。如果您未指定异常类型,则默认为throw
-这不是您想要的,因为string:rstr
从不抛出任何东西,只有在参数不正确时它才会引发错误类型。
那应该是:
check_banword(Word, BlackWord) ->
try string:rstr(Word, BlackWord) of
Res when Res > 0 ->
true;
_ ->
false
catch
error:_ -> false
end.
还有一个更广泛的问题:您是否应该在此处实际使用try
?如果此函数发生错误,则表示参数不是字符串,这是调用者的责任。由于此功能无法解决该问题,因此我想说它不应捕获错误,而应将其传播给调用者。 (这就是Erlang的“让它崩溃”的哲学。)