首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Erlang函数名称在运行时更改

Erlang是一种函数式编程语言,它支持在运行时更改函数名称。在Erlang中,函数名称被称为原子(atom),它们是不可变的,但是可以通过使用模块的代码重新加载来更改函数名称。

在Erlang中,可以使用module:module_info/0函数来获取模块的信息,包括模块中定义的函数列表。通过重新加载模块,可以修改函数的定义并更改函数名称。

下面是一个示例,展示了如何在Erlang中更改函数名称:

代码语言:txt
复制
-module(my_module).
-export([my_function/1]).

my_function(Arg) ->
    io:format("Hello ~p!~n", [Arg]).

% 在运行时更改函数名称
change_function_name() ->
    NewModuleName = my_module_renamed,
    NewFunctionName = my_function_renamed,
    OldModuleName = my_module,
    OldFunctionName = my_function,
    
    % 重新加载模块
    case code:soft_purge(OldModuleName) of
        true ->
            case code:load_file(NewModuleName) of
                {module, NewModuleName} ->
                    % 修改函数名称
                    case erlang:delete_module(OldModuleName) of
                        true ->
                            erlang:put(OldModuleName, undefined),
                            erlang:put(OldFunctionName, undefined),
                            erlang:put(NewModuleName, undefined),
                            erlang:put(NewFunctionName, undefined),
                            true;
                        _ ->
                            false
                    end;
                _ ->
                    false
            end;
        _ ->
            false
    end.

上述示例中,my_module模块定义了一个名为my_function/1的函数。change_function_name/0函数演示了如何在运行时更改函数名称。首先,它定义了新的模块名称my_module_renamed和新的函数名称my_function_renamed。然后,它使用code:soft_purge/1函数来卸载旧模块,使用code:load_file/1函数来加载新模块。最后,它使用erlang:delete_module/1函数删除旧模块,并使用erlang:put/2函数将旧模块和函数名称设置为undefined

需要注意的是,这种在运行时更改函数名称的做法并不常见,因为它可能会导致代码的可读性和可维护性降低。在实际开发中,建议遵循良好的编程实践,避免在运行时更改函数名称。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Erlang 和 Elixir 介绍

在编程范型上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的Erlang是一个及早求值, 单次赋值和动态类型的函数式编程语言。...使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅只是一两个环节,比起C程序的线程切换要高效得多得多了。...Erlang行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。...软实时性 - Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。 热代码升级 - Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。...Elixir 是一个基于 Erlang 虚拟机的函数式、面向并行的通用编程语言。

2K30

【Go 语言社区】有关GO和Erlang的一些思考

Erlang不能解决所有的问题!本文主要谈论的是哪些地方Erlang适合使用而GO却不适合使用。   ...GO语言的抢占式调度是针对系统调用的,但现在,当goroutine检查所有函数调用的堆栈时抢占就能发生,如果goroutine的运行周期比以前的长,那么这很可能会被标记为失败(这将会造成抢占)。...低等待时间是很困难的,执行时间越长,它就能为你做的越好。 错误处理   如果返回值为nil,不仅仅只是没有异常和使用检查。...静态链接   是的,同样积极正面的一个东西,但如果用在期望运行时间很长的系统上它就变得消极了。虽然没有链接执行确实会比较慢,但这却给了Erlang在运行系统上代码替换方面的优势。...很有必须说明一下,由于Erlang的调度和垃圾收集策略,许多这些速度权衡并不意味着Erlang在同样的应用中会比其它语言慢,特别是如果Erlang应用是唯一一个仍在运行的。

1.3K110
  • 编译型语言、解释型语言、静态类型语言、动态类型语言、强类型语言、弱类型语言概念与区别

    代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby 3、混合型语言 既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。...动态语言和静态语言 1、动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。...通俗点说就是在运行时代码可以根据某些条件改变自身结构。 主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。...得益于特有的run time机制(准确说run time不是语法特性是运行时环境,这里不展开)OC代码是可以在运行的时候插入、替换方法的。...主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。

    3.2K110

    如何在Ubuntu 16.04上使用Distillery和edeliver自动化Elixir-Phoenix部署

    1.0", only: :dev}, {:gettext, "~> 0.11"}, {:cowboy, "~> 1.0"} ] end ... deps是一个私有函数...保存更改并关闭mix.exs。 现在,告诉mix我们获取新的依赖项,以便它们在运行时可用。...include_erts表示我们是否要捆绑Erlang行时系统,这在目标系统没有安装Erlang或Elixir时很有用。include_src表示我们是否要包含源代码文件。...git commit -m "Setting up automated deployment" 输出重复提交您的提交消息,然后报告更改的文件数,插入的行数以及添加到存储库的文件的名称。...mix edeliver start production 输出告诉用户项目正在运行,正在运行的主机以及它在生产服务器上使用的发行版的路径。回应将是START DONE!。

    4.3K00

    代码结构的演进

    为了让你们那无时无刻不在运算的大脑继续保持很好的节奏感,这篇文章依旧会和技术有关;但又不会太techie,看一看,想一想,乐一乐就好。 今天瞎侃侃代码的发展史,走心走肾随你。 言归正传。...为了让代码更可读,从goto中衍生出了更好的控制逻辑:分支,循环(或者递归),以及用于管理目的的 [1] 函数,类 [2] 和模块。代码可以以更清晰,更可控地方式被撰写。...可程序员们还在呼唤更好的解决之道:既然静态的代码可以用树状的层级结构来管理,为什么运行时的代码不能采用同样的方式呢?...(error kernel) 于是,运行时的软件不再是一个各种代码揉在一起的平面,而是一棵层层隔离的树。...Don’t Repeat Yourself可以视作代码管理的一种手段 2. functional language没有类的概念,只有函数和模块 3.

    1.1K50

    RabbitMQ 生产环境配置详解

    legacy:使用遗留内存报告(运行时认为将使用多少内存)。这种策略相当不准确。...Erlang行时必须包含HiPE支持。如果不是,启用此选项将不起作用。HiPE在某些平台上根本不可用,尤其是Windows。...rabbit,[ {backing_queue_module,rabbit_variable_queue} ]} msg_store_file_size_limit 消息储存的文件大小,现有的节点更改是危险的...io的线程数 建议不要低于32,linux默认为128 ,windows默认为64 RABBITMQ_NODENAME rabbitmq节点名称,集群中要注意节点名称唯一 linux 默认节点名为...ulimit -n 更改方式: 1 临时修改 ulimit -n 65536 2 永久修改 1.4.7 TLS建议尽可能使用TLS连接,使用TLS会对传输的数据加密,但是对系统的吞吐量产生很大的影响

    3.2K10

    Erlang 03 - Erlang缺陷

    当然, 函数调用几乎是“无所不能”的, 他们的行为并不是一目了然, 但通常每个函数都附有清晰的文档. 和任何编程语言一样, Erlang也不可避免的具有一些缺陷....数据类型 内存占用量 小整数 1个字 大整数 至少3个字(可按需增长) 浮点数 在32位架构下占4个字, 在64位架构下占3个字 原子 1个字(原子的名称字符串仅存在Erlang节点的原子表中) 二进制串或位串...大数 在Erlang中整数的大小不受限制. 一个字长塞不下时, 运行时系统会自动把它转换成长度可变的大数(但不可超出可用内存的大小)....原子的名称字符串保存在一张原子表中, 每个Erlang节点只存一份. 原子所占用的那个字中保存的实际上是原子表中对应字符串的索引....进程 进程是所有Erlang程序的基本执行环境. 所有代码都要依托于进程才能执行. 即使是自身不启动任何进程的库模块的代码, 运行时也要依托于调用他的进程才行.

    1.7K30

    大数据必学Java基础(八十八):通过案例和概念体会反射的好处

    Method method = cls.getMethod("payOnline"); method.invoke(o); }}二、通过概念再体会反射JAVA反射机制是在运行状态中...说明:在运行期间,如果我们要产生某个类的对象,Java虚拟机(JVM)会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。...扩展知识:动态语言vs静态语言1、动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。...通俗点说就是在运行时代码可以根据某些条件改变自身结构。...主要动态语言:Object-C、 C#、JavaScript、 PHP、 Python、 Erlang 等2、静态语言与动态语言相对应的,运行时结构不可变的语言就是静态语言。

    38181

    如何使用邮政创建一个完全精选的邮件服务器

    在运行以下查询为您的邮政安装创建一个新的数据库。...GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword"; 现在运行以下命令立即对数据库权限应用更改...EXIT; 安装RabbitMQ RabbitMQ是用Erlang语言编写的,在本教程中我们将安装最新版本的Erlang到服务器中。 使用以下命令安装Erlang。...host: 127.0.0.1 username: postal password: p0stalpassw0rd prefix: postal 根据您创建的数据库更改用户名,密码和数据库名称...提供组织的名称。 您可以选择使用自动生成的短名称,也可以自己指定一个。 用SMTP服务器进行身份验证时,使用短名称作为用户名。 它应该只包含字母,数字和连字符。

    1.6K20

    【愚公系列】2021年12月 RabbitMQ之Erlang-Window11下的安装

    文章目录 一、Erlang是什么? 二、安装步骤 1.下载erlang 2.安装erlang 3.配置环境变量 3.检查安装是否成功 总结 ---- 一、Erlang是什么?...Erlang是运行于虚拟机的解释性语言,但是也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。...在编程范型上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的Erlang是一个及早求值,单次赋值和动态类型的函数式编程语言。...使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。...Erlang行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断 的情况下更新。

    53440

    LINC switch系列之架构分析与源码探索

    关于Erlang Erlang是一种运行在虚拟机上的函数式语言,和其他运行在虚拟机的语言类似,单纯在性能上无法和C这类语言相比,因为底层的虚拟机就是用C实现的。...但是,它利用函数式语言无副作用的特性,提供了一个无锁,基于消息传递的并发机制。...Erlang行时环境可以安装在多个平台上,比如Linux, Windows, FreeBSD…就像JVM一样可以跨平台。...3.OTP库:这个库是整个Erlang中最难掌握的部分,应该说,怎样不依靠OTP开发Erlang应用才是最难的。...1.入门Erlang shell,很多对运行中系统的更改都可以通过shell操作实现。 2.理解Erlang中的数据结构,比如元组,列表等。 3.理解rebar,一个Erlang应用打包工具。

    93960

    上帝说:要有一门面向未来的语言,于是有了 erlang

    两个 link 起来的 process —— 我们暂且赋予他们名称为小明和小红 —— 如果小明挂了,小红会收到 EXIT signal,如若不作处理,正常情况下也会挂掉,而小红之死,会进一步触发和小红...在函数语言的基础上,erlang 还毫无惧色地把 prolog 的「别扭」的语法几乎照搬过来 —— 语句和语句间用逗号分隔,函数用句号结束。...OTP OTP 的全称是 Open Telecom Platform,这个名称其实已经不重要了。基本上,谈到 erlang,我们都会谈到 OTP,它已经成为 erlang 的一部分。...和 javascript,python 等一样,是运行时的类型检查而非编译时的类型检查 immutable 引入的无处不在的内存拷贝,拖累了整个系统的效率。...即便你不用 erlang,这个代价也很值得,你可以把它的很多思想带入你所熟悉的语言中去解决问题。 erlang 虽然是强类型语言,但运行时才做类型检查这也让很多人诟病。

    1.4K110

    (译) Understanding Elixir Macros, Part 1 Basics

    如果你很熟悉 Elixir 和 Erlang, 但对宏还感觉到困惑, 那么这些内容很适合你. 如果你刚开始接触 Elixir 和 Erlang, 那么最好从其它地方开始....例如, Elixir 编译器还会生成 Erlang AST, 然后依赖 Erlang 函数将其转换为字节码, 但是我们不需要知道细节. 不过, 我认为这幅图对于理解元编程代码是有帮助的....进入运行时 (run-time) 后, 代码就已经定型了, 代码中不会有元编程结构在运行. 创建 AST 片段 什么是 Elixir AST?...宏本质上是特殊形式的函数. 它的名字会被销毁, 并且只能在展开期调用它(尽管理论上你仍然可以在运行时调用). 我们的宏接收到了一个 quoted expression....这是你在运行时不能够对一个普通函数做的事之一. 虽然我们能在运行时调用 Macro.to_string/1, 但问题在于我们没办法再访问 AST 了, 因此不能够知道某些表达式的字符串形式了.

    18630
    领券