`

[练习]erlang编程练习2:apply使用

 
阅读更多

一个蛮简单的程序 输入一串字符串(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语言进行软件开发的整个过程。 - **编程**:指的是编写代码、软件开发的活动。 - **并发**:指的是同时进行多个任务,Erlang语言在这方面的表现尤为突出。 - **服务器**:服务器...

    图书:Erlang编程

    《Erlang编程》是一本深入探讨Erlang语言的图书,主要面向对并发处理、分布式系统和高可用性有需求的开发者。Erlang是一种为构建大规模并发系统而设计的函数式编程语言,它源自爱立信,以其在电信行业的成功应用而...

    Erlang编程指南

    “即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。不同层次的Erlang程序员都会发现本书是有价值的学习和参考资料。”, ——Steve Vinoski,《IEEE Internet Computing》专栏作家, 《Erlang...

    Erlang编程规则——中文翻译版本

    Erlang是一种高级编程语言,专为构建并发、分布式、容错的系统设计。Erlang语言的编程规则和约定对于保证代码的可读性、可维护性、性能和稳定性至关重要。本文将对Erlang编程规则的中文翻译版本中的部分内容进行详细...

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...

    erlang入门级练习:LeetCode OJ问题的部分erlang 源码

    我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...

    erlang编程指南

    erlang编程语言圣经 erlang从业人员的必备书籍 erlang语言开发入门

    erlang 24.0 龙芯 loongarch64 预编译版本

    Erlang是一种强大的并发编程语言,特别适合于构建高可用性、分布式系统,尤其是在电信、银行和互联网领域广泛应用。在给定的标题“erlang 24.0 龙芯 loongarch64 预编译版本”中,我们可以看到这个软件包是为龙芯...

    Erlang程序设计(中文版-完整书签)&Erlang编程指南(中英文版)

    Erlang程序设计(中文版-完整书签)&Erlang编程指南(中英文版)

    Erlang入门:构建application练习2

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。在本教程中,我们将深入探讨如何使用Erlang构建一个名为"Application"的基本应用程序,这在...

    Erlang入门:构建application练习4(进程link的作用)

    在Erlang编程语言中,进程是其核心特性之一,它们是并发执行的实体,类似于其他语言中的线程。在Erlang中,进程间通信(IPC)是通过消息传递来实现的,而`link`机制是这个通信模型中非常重要的一部分。本教程将通过...

    并行编程语言Erlang:Erlang OTP框架及其应用开发指南

    内容概要:本文档详细介绍了Erlang编程语言及其并行编程模型,并重点阐述了Erlang OTP框架的特性和应用场景。首先,文档简述了Erlang语言的特点,包括轻量级进程、模式匹配和热代码升级等特性,以及它在构建高可用、...

    erlang programming

    2. **并发编程**:Erlang的并发模型是其独特之处。它通过轻量级进程(Lightweight Processes, LWP)实现并发,进程间通信(Inter-Process Communication, IPC)主要依赖消息传递。Concurrent Programming in ERLANG...

    erlang-23.2.1-1.el7.x86-64.rpm

    Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ ...

    Erlang编程语言

    在《Erlang编程指南》这本书中,作者Francesco Cesarini和Simon Thompson深入浅出地介绍了Erlang语言的基础和高级特性,涵盖了从进程通信到并发设计模式,再到OTP框架的使用。通过学习这本书,读者可以全面理解...

    Erlang编程中文学习手册.pdf

    根据提供的文件信息,这份Erlang编程中文学习手册涵盖了Erlang编程语言的基础知识和一些进阶内容,旨在帮助读者从入门到初中级水平的提升。以下是手册中提到的Erlang编程的相关知识点。 首先,手册介绍了Erlang语言...

Global site tag (gtag.js) - Google Analytics