你好我还在学习Erlang,我试图通过各种功能传递一个以上的论点,但我正在撞墙。
开始我使用xmerl.hrl来解析xml。我通过erlfile:process_xml(" filename.xml")命令行调用process_xml(Doc)。
process_xml(Doc) ->
makeBottom1(Doc,"yup got here").
从这里开始,进程调用makeBottom1传入doc和一个字符串,以便稍后测试输出。
makeBottom1(E = #xmlElement{name='resource'}, Derp) -> "Got to resource";
makeBottom1(E, Derp) -> ["<h1>BURP</h1>", Derp, built_in_rules( fun makeBottom1/2 , [E, Derp] ), "-" ].
我希望它能够回归&#34;得到资源&#34;很多次,但它似乎永远不会绊倒那个函数调用。
它的回报是:
["<h1>BURP</h1>","yup got here",[],"-"]
我应该使用不同的xml解析器来实现我想要的功能吗?我只是犯了一个菜鸟的错误吗?
答案 0 :(得分:1)
函数built_in_rules
需要2个参数:一个带有arity 1(一个参数)的函数和一个XML节点。由于您的参数不符合the function clauses描述的模式,因此您将触发一个只能返回空列表的全部捕获条件。
要解决此问题,您需要更改使用built_in_rules
的方式。请尝试以下方法:
built_in_rules(fun(Child) -> makeBottom1(Child, Derp) end, E)
我们不是试图传递一个arity为2的函数并期望built_in_rules
知道如何处理它,而是传递一个带有arity 1的函数,built_in_rules
知道如何知道如何使用,并使用闭包来添加我们的第二个参数。我们还修改了函数调用的第二个参数,以便我们只传入当前的XML节点。