1
作品Erlang:qlc:info会抛出一个错误,而qlc:eval不会 - 为什么?
[email protected] # erl
Erlang R14B02 (erts-5.8.3) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
Eshell V5.8.3 (abort with ^G)
1> Tmp = ets:new(test, [bag]), Ref = make_ref(),
1> qlc:eval(qlc:q([Ref1 || Ref1 <- ets:table(Tmp), Ref =:= Ref1])).
[]
2> qlc:info(qlc:q([Ref1 || Ref1 <- ets:table(Tmp), Ref =:= Ref1])).
"ets:table(16400,\n [{traverse,\n {select,\n [{'$1',\n [{'=:=',{const,#Ref<0.0.0.29>},'$1'}],\n ['$1']}]}}])"
3> halt().
不工作
[email protected] # erl
Erlang R14B02 (erts-5.8.3) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:0] [kernel-poll:false]
Eshell V5.8.3 (abort with ^G)
1> Tmp = ets:new(test, [bag]), Ref = make_ref(),
1> qlc:eval(qlc:q([Ref1 || {Ref1} <- ets:table(Tmp), Ref =:= Ref1])).
[]
2> qlc:info(qlc:q([Ref1 || {Ref1} <- ets:table(Tmp), Ref =:= Ref1])).
** exception error: no match of right hand side value {error,{1,erl_parse,["syntax error before: ",["Ref"]]}}
in function qlc:abstract/3
in call from qlc:abstract/3
in call from qlc:abstract/4
in call from qlc:info/2
3> halt().
我不明白为什么。在一个更复杂的查询中发现了这个错误,因为这个错误,我无法解释和配置文件。
有趣的是,如果你调用它两次,qlc:info/1成功。 – 2011-04-15 10:13:11
你可以发布PoC吗?我不确定我了解你的意思。 – trytrytry 2011-04-23 11:53:44
这是一个古老的问题,我很惊讶它还没有回答或关闭。我的问题是,为什么你将表中的引用存储为{Ref}而不是Ref? – pedromanoel 2012-06-13 14:14:21