首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优雅地检查二郎的许多条件?

问如何优雅地检查二郎的许多条件?
EN

Stack Overflow用户
提问于 2009-03-20 13:20:29
回答 2查看 4.1K关注 0票数 13

因此,当用户发送注册帐户的请求时,他们会发送用户名、密码、电子邮件和其他信息。注册函数必须验证它们的所有数据。一个例子是:

alphanumeric

  • verify
  • 验证电子邮件未使用
  • 验证用户名未使用
  • 验证用户名为

所有字段均在X字符长

  • 所有字段小于Y字符long

F 211

现在我不想有一个5级深度的if或case语句,但我还有其他选择吗?将它分割成单独的函数听起来是个不错的主意,但是我只需要在某种条件下检查函数的返回值,它就回到了原来的问题上。

我可以将它们分解成函数,然后调用一个if语句,其中包含所有的条件或条件,但这不能满足我的需要,因为我需要能够告诉用户具体的错误(如果有)。

在二郎如何处理这种情况?是否有一个等价的返回语句,或者它必须是函数中的最后一个可执行行才能成为返回值?

EN

回答 2

Stack Overflow用户

发布于 2019-07-13 04:59:59

基于@JLarky的回答,下面是我想出的一些东西。它也从哈斯克尔的单曲中得到了一些启示。

代码语言:javascript
复制
-record(user,
    {name :: binary(), 
     email :: binary(), 
     password :: binary()}
).
-type user() :: #user{}.
-type bind_res() :: {ok, term()} | {error, term()} | term().
-type bind_fun() :: fun((term()) -> bind_res()).


-spec validate(term(), [bind_fun()]) -> bind_res().
validate(Init, Functions) ->
    lists:foldl(fun '|>'/2, Init, Functions).

-spec '|>'(bind_fun(), bind_res())-> bind_res().
'|>'(F, {ok, Result}) -> F(Result);
'|>'(F, {error, What} = Error) -> Error;
'|>'(F, Result) -> F(Result).

-spec validate_email(user()) -> {ok, user()} | {error, term()}. 
validate_email(#user{email = Email}) ->
...
-spec validate_username(user()) -> {ok, user()} | {error, term()}.
validate_username(#user{name = Name}) ->
...
-spec validate_password(user()) -> {ok, user()} | {error, term()}.    
validate_password(#user{password = Password}) ->
...

validate(#user{...}, [
    fun validate_email/1,
    fun validate_username/1,
    fun validate_password/1
]).
票数 0
EN

Stack Overflow用户

发布于 2013-05-05 07:47:59

也许你需要使用

代码语言:javascript
复制
receive
    message1 -> code1;
    message2 -> code2;
    ...
end.

但是,当然会有生成()方法。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/666111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档