首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有一个原子类型是有用的(像在灵丹妙药,erlang)?

为什么有一个原子类型是有用的(像在灵丹妙药,erlang)?
EN

Stack Overflow用户
提问于 2015-08-28 00:24:17
回答 3查看 6.7K关注 0票数 28

根据http://elixir-lang.org/getting-started/basic-types.html#atoms

原子是常量,它们的名字是它们自己的值。其他一些语言称这些符号为

我想知道有一个原子类型有什么意义。可能是为了帮助构建解析器还是宏?但是在日常使用中它如何帮助程序员呢?

顺便说一句:永远不要使用长生不老药,只要注意它是存在的(也在kdb中)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-28 10:56:08

我认为erlang中最常见的用法之一是标记变量和消息,使用快速比较(模式匹配),就像mipadi所说的那样。

例如,您编写的函数可能会失败,这取决于所提供的参数、与服务器的连接状态或任何原因。一个非常常见的用法是在成功时返回一个元组{ok,Value},如果出现错误,则返回{ error,原因}。调用函数将只能选择管理成功案例编码{ok,Value} = yourModule:yourFunction(Param...)。这样做很明显,您只考虑成功的情况,直接从函数返回中提取值,它是快速的,并且您不必与yourModule共享任何头来解码ok原子。

在信息中你经常会看到像{add,Key,Value}{delete,Key}{delete_all}{replace,Key,Value}{append,Key,Value}之类的东西.这些都是显式消息,具有与前面提到的相同的优点:快速、合理、不共享头.

票数 10
EN

Stack Overflow用户

发布于 2015-08-28 00:31:25

它们基本上是字符串,可以很容易地测试它们是否相等。

考虑一下绳子。从概念上讲,如果字符串的内容相同,我们通常希望它们是相等的。例如,“狗”==“狗”但是“狗”!=“猫”。但是,要检查字符串的相等性,我们必须检查一个字符串中的每个字母是否等于另一个字符串中相同位置的字母,这意味着我们必须遍历字符串的每个元素,并检查每个字符是否相等。如果处理Unicode字符串并必须考虑不同的合成相同字符的方式(例如,字符é在UTF-8中有两种表示形式),这就变得更加麻烦了。

如果我们在内存中相同的位置存储相同的字符串,就会简单得多。然后,检查等式将是一个简单的指针或索引比较。

由于在内存中的相同位置存储相同的字符串,我们也可以存储每种唯一类型的字符串的副本,而不管它在程序中使用了多少次,从而也为常用字符串节省了一些内存。

在更高的层次上,使用原子还可以让我们像对待其他原始数据类型一样看待字符串,比如整数。

票数 81
EN

Stack Overflow用户

发布于 2015-08-28 09:10:34

原子是以自身为值的常数。这是一个非常有用的概念,在分布式系统中,常数可以在每个系统上被不同的定义,而原子是自包含的,不需要定义。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32261500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档