簡體   English   中英

在 erlang 中,我如何解釋 `fun erlang:'+'/2` 中的 `+` 運算符

[英]In erlang, how do I interpret the `+` operator in `fun erlang:'+'/2`

我是Elixir的新手,但對Erlang有一些經驗。 As I've been trying to learn Erlang while experimenting with the RabbitMQ implementation of RAFT, ra , I've come across a line in erlang Machine = {simple, fun erlang:'+'/2, 0},

Machine = {simple, fun erlang:'+'/2, 0},

所以,在{simple, fun erlang:'+'/2, 0}, ,這看起來像是在創建一個元組。 元組中的第一項是一個名為simpleatom ,接下來function和最后一個integer

{atom, function, integer}

我不明白 function fun erlang:'+'/2在這種情況下做了什么。 /2表示它應該需要 2 個參數。 '+'只是一個加法運算符嗎? 如果是這樣,這是一個簡單的sum function 我想多了? erlang 文檔說“如果原子不是以小寫字母開頭或包含除字母數字字符、下划線 (_) 或 @ 之外的其他字符,則原子將用單引號 (') 括起來。”

在我看到此代碼的給定上下文中,它說明State machine that implements the logic ,這使我理解這台 state 機器以原子simple命名,執行加法,並將結果保存在最后一項元組。

是否相當於在 elixir 中執行&:erlang.+/2 文檔參考

任何上下文都會有幫助。

你完全正確 - 這個 function 只是加法運算符,它用單引號括起來,因為它不是以小寫字母開頭。 fun erlang:'+'/2相當於 Elixir 的&:erlang.+/2

您可以使用 function 語法而不是運算符語法來調用它:

> erlang:'+'(1,2).
3

您可以將其用作高階 function:

> lists:foldl(fun erlang:'+'/2, 0, [1, 2, 3]).
6

(當然,您通常會使用lists:sum/1而不是后一個示例。)

根據 Erlang 文檔,此特定用法是 forms 之一,用於指定Fun expression ,而這個是fun Module:Name/Arity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM