-1

我在 erlang 中开发了这个功能:

get_user_cin_by_token(Token) ->
    Q = qlc:q([{X#person.idcard} || X <- mnesia:table(person),
                X#person.token =:= Token]),
    case do(Q) of
        [H] ->
            {ok, H};
        [] ->
            {error, notfound}
    end.

这是我执行此函数时的结果示例:

{ok,{"07049200"}}

我的目标是在没有 {} 的情况下仅显示“07049200”

我用这个功能测试:

test3()->

    case get_user_cin_by_token("93090612") of
        {ok, H}-> G=string:substr(H, 2, length(H)-1),
         io:format("~s~n",[G]);
        {error, notfound}->io:format("error")
end.

但是这个错误被显示:

** exception error: bad argument
     in function  length/1
        called as length({"07049200"})
4

2 回答 2

3

{"07049200"}不是字符串;这是一个元组。因此,您可以通过模式匹配“解包”它:{H} = {"07049200"}将导致H=07049200.

在您的原始代码中,您可以执行以下操作:

get_user_cin_by_token(Token) ->
    Q = qlc:q([{X#person.idcard} || X <- mnesia:table(person),
                X#person.token =:= Token]),
    case do(Q) of
        [{H}] ->
            {ok, H};
        [] ->
            {error, notfound}
    end.
于 2012-12-28T11:09:10.973 回答
0

尝试这个:

test3()->

    case get_user_cin_by_token("93090612") of
        {ok, {H}}-> io:format("\"~s\"~n",[H]);
        {error, notfound}->io:format("error")
end.
于 2012-12-28T12:22:55.753 回答