一个蛮简单的程序 输入一串字符串(list)然后执行:
-module(list_apply). -export([apply/1]). apply(Str) -> re_run(Str). re_run(Str) -> Res=re:run(Str,"\\s*(.*)\\s*:\\s*(.*)\\((.*)\\)\\.",[{capture,[1,2,3],list}]), case Res of nomatch -> io:format("输入有误"); {match,[M,F,A]} -> do_apply(string:strip(M),string:strip(F),A) end. do_apply(M,F,A) -> try {ok,Token,_}=erl_scan:string("["++ A ++"]."), {ok,Terms}=erl_parse:parse_term(Token), erlang:apply(list_to_atom(M),list_to_atom(F),Terms) catch error:Case -> io:format("error:~p~n",[Case]) end.
代码比较简单
先用正则匹配一下 匹配成功并抽取模块 函数和参数 接下去就做参数的解析
参数的解析使用了erl_scan:string/1先变成tokens的形式 然后转给erl_parse的parse_term/1处理
为了方便直接进行异常处理
这边的string:strip/1是去除string(list)前后的空格 用ungreedy模块那边的空格是去得掉 但是函数前的空格居然还是会被保留的跪Orz...
输入输出如下:
22> c(list_apply). {ok,list_apply} 23> list_apply:apply("erlang:time()."). {14,7,38} 24> list_apply:apply("string:strip(\"ac \")."). "ac" 25> list_apply:apply("erlang:time(12)."). %erlang:time/1这个函数不存在的 error:undef ok 2> list_apply:apply("io:format(\"hello~p~n\",[\"nihao\"])."). hello"nihao" ok 3> list_apply:apply("io : format(\"hello~p~n\",[\"nihao\"])."). hello"nihao" ok
相关推荐
“即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。不同层次的Erlang程序员都会发现本书是有价值的学习和参考资料。”, ——Steve Vinoski,《IEEE Internet Computing》专栏作家, 《Erlang...
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
NULL 博文链接:https://jianshi-dlw.iteye.com/blog/1179731
我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...
erlang编程语言圣经 erlang从业人员的必备书籍 erlang语言开发入门
从Erlang.org的Programming rules翻译的中文版本
Erlang程序设计(中文版-完整书签)&Erlang编程指南(中英文版)
英文原版书籍,是学习Erlang 的入门书,简单通俗易懂,极力推荐.
Erlang入门:构建application练习3,实例演示如果构建一个最简单的Erlang Application
erlang-19.3.2
Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。 Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...
erlang最新 api
erlang二进制高效编程 erlang异常处理详解 开发经验: 面对软件错误构建可靠的分布式系统 编写分布式的 Erlang 程序:陷阱和对策 硝烟中的Erlang 深入底层: erlang VM基于多核处理器的可伸缩性特征 erlang VM内部...
这是《 Erlang编程语言》的上一页,我们正在处理中,将那里的所有书籍都转换为新页面。 请再次检查此页面!!!
使用 kerl、erlang.mk 和 relx 生成最小的 erlang 版本 使用 Richard Jones 的演示“戳”应用程序: : 原始说明,使用 erlang.mk 的 rebar instad: : 为什么要使用erlang.mk: 关于 erlang.mk(和 relx): ...