你可能想多了。原子只是一个值。就像true和false都是值一样,您现在可以将任何单词用作值。事实上true,false和nil只是底层的原子。
您可以传递原子,而不是作为内部消息在应用程序中传递字符串。您可以使用原子,而不是使用字符串作为映射或关键字列表的键。
原子有一个非常大的警告,它们永远不会被垃圾收集,因此您永远不应该通过用户输入或其他方式以编程方式生成原子,否则如果创建太多,您将面临虚拟机溢出的风险。
您可以创建的最大原子数默认为 1,048,576。http://erlang.org/doc/efficiency_guide/advanced.html
以下是一些示例:https://github.com/itsgreggreg/elixir_quick_reference#atom
由于这个问题不是那么具体,我只想举例说明一下.
Elixir中原子的一种常见用途是将它们用作模式匹配的消息.
例如,假设您具有对http请求进行某种处理的功能.此处理的结果要么是成功的过程,要么是失败的过程.
因此,您可以使用原子来指示此处理是否成功.例如
def process(file) do
lines = file |> split_lines
case lines do
nil ->
{:error, "failed to process file"}
lines ->
{:ok, lines}
end
end
Run Code Online (Sandbox Code Playgroud)
这里我们说的是,该方法process/1将返回两个元组的响应.如果我们的处理结果成功,它将返回{:ok, lines},但是如果它失败(例如返回nil),那么它将返回错误.因此,这允许我们对此结果进行模式匹配.
{:ok, lines} = process('text.txt')
Run Code Online (Sandbox Code Playgroud)
因此,我们可以确定我们将始终返回给我们的行,而不是一个零值(因为它会抛出错误).当将多个方法一起管道时,这变得非常有用.
有关原子的更多一般信息,请查看以下链接:
来自http://elixir-lang.org/getting-started/basic-types.html#atoms
原子是常量,其名称是它们自己的值.其他一些语言称这些符号
因此,如果你来自主流语言,它们就像常量一样.但是与使用中的全局枚举更相似(ish)(即,它们表现为独立的数据类型).您通常将它们作为要匹配的目标引入,因此它们将您的代码需要的一些概念命名为
true/false是一个经典案例
:ok,:error你会看到别的东西
你可能想要:red, :green, :blue,或者:yes, :no, :maybe,或者:up, :down, :left, :right 这些概念是否是重要的代码(如2d游戏)
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |