我在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"})
答案 0 :(得分: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.
答案 1 :(得分:0)
试试这个:
test3()->
case get_user_cin_by_token("93090612") of
{ok, {H}}-> io:format("\"~s\"~n",[H]);
{error, notfound}->io:format("error")
end.