为什么Erlang的进口产品具有优势?

 傻丫头苏婵_596 发布于 2023-01-31 18:15

我找到了Erlang的模块arity import /n,其中n是参数的数量而不是奇怪的.

在Java和其他各种语言中,您可以执行以下操作:

import static com.stuff.Blah.myFunction;

Blay.myFunction(..)无论参数如何,都将导入所有重载.

此外,我想明确为什么语言设计师认为这是一个好主意(我不是试图批评语言......只是好奇)?

它与代码交换有关吗?

或者它是否与隐藏保护方法的递归有关?如果是这样的话,为什么不允许arity出口但不需要进口arity?

我为什么要这么明确?那是导入两个参数函数而不是三个参数myFunction

rvirding.. 9

你应该知道Erlang中的导入函数真正做了什么.这是纯粹的文本转换.如果我这样做,-import(foo, [bar/1,baz/2]).则意味着当我编写一个类似的调用bar(5)baz(a, 3)编译器将这些调用转换为foo:bar(5)foo:baz(a, 3).这就是它所做的一切,没有别的.它没有检查任何东西:

它不检查模块是否foo包含函数bar/1baz/2.

它甚至不检查模块是否foo存在.

它真的只是隐藏你在另一个模块中调用一个函数.这就是为什么经验丰富的Erlangers的建议是"不要使用它".那是一个错误.不幸的是,添加愚蠢的东西比摆脱它们容易得多,所以我们永远无法删除它.

"它与代码交换有关吗?"

是的,有点.Erlang 中所有代码处理的单元都是模块.所以你编译模块,加载模块,清除和删除模块.这意味着系统中根本没有模块间依赖关系,并且编译器在编译模块时不会对其他模块做出任何假设.没有假设编译模块的环境与运行模块的环境相同.这就是为什么它在运行时系统会检查你试图在另一个函数中调用的函数是否存在,或者即使模块本身存在.这就是为什么这import是纯粹的文本转换.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有