Erlang ++操作员。语法糖,还是单独操作?

发布于 2024-10-23 13:06:24 字数 112 浏览 2 评论 0原文

Erlang 的 ++ 运算符只是 lists:concat 的语法糖,还是完全不同的操作?我试过搜索这个,但不可能通过谷歌搜索“++”并得到任何有用的东西。

Is Erlang's ++ operator simply syntactic sugar for lists:concat or is it a different operation altogether? I've tried searching this, but it's impossible to Google for "++" and get anything useful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

流星番茄 2024-10-30 13:06:24

这就是 lists:concat/1 在 stdlib/lists 模块中的实现方式:

concat(List) ->
    flatmap(fun thing_to_list/1, List).

其中:

flatmap(F, [Hd|Tail]) ->
    F(Hd) ++ flatmap(F, Tail);
flatmap(F, []) when is_function(F, 1) -> [].

和:

thing_to_list(X) when is_integer(X) -> integer_to_list(X);
thing_to_list(X) when is_float(X)   -> float_to_list(X);
thing_to_list(X) when is_atom(X)    -> atom_to_list(X);
thing_to_list(X) when is_list(X)    -> X.   %Assumed to be a string

所以,lists:concat/1 实际上使用了 '++'操作员。

This is how the lists:concat/1 is implemented in the stdlib/lists module:

concat(List) ->
    flatmap(fun thing_to_list/1, List).

Where:

flatmap(F, [Hd|Tail]) ->
    F(Hd) ++ flatmap(F, Tail);
flatmap(F, []) when is_function(F, 1) -> [].

and:

thing_to_list(X) when is_integer(X) -> integer_to_list(X);
thing_to_list(X) when is_float(X)   -> float_to_list(X);
thing_to_list(X) when is_atom(X)    -> atom_to_list(X);
thing_to_list(X) when is_list(X)    -> X.   %Assumed to be a string

So, lists:concat/1 actually uses the '++' operator.

冷弦 2024-10-30 13:06:24

X ++ Y 实际上是 lists:append(X, Y) 的语法糖。

http://www.erlang.org/doc/man/lists.html #append-2

函数lists:concat/2 是一个不同的野兽。该文档对其描述如下:“连接事物元素的文本表示。事物的元素可以是原子、整数、浮点数或字符串。”

X ++ Y is in fact syntactic sugar for lists:append(X, Y).

http://www.erlang.org/doc/man/lists.html#append-2

The function lists:concat/2 is a different beast. The documentation describes it as follows: "Concatenates the text representation of the elements of Things. The elements of Things can be atoms, integers, floats or strings."

花开雨落又逢春i 2024-10-30 13:06:24

++ 的一个重要用途尚未提及:在模式匹配中。例如:

handle_url(URL = "http://" ++ _) -> 
    http_handler(URL);
handle_url(URL = "ftp://" ++ _) ->
    ftp_handler(URL).

One important use of ++ has not been mentioned yet: In pattern matching. For example:

handle_url(URL = "http://" ++ _) -> 
    http_handler(URL);
handle_url(URL = "ftp://" ++ _) ->
    ftp_handler(URL).
猫七 2024-10-30 13:06:24

这是完全不同的操作。 ++ 是普通列表追加。 list:concat 采用单个参数(必须是列表),将其元素字符串化,然后连接字符串。

++ : http://www.erlang.org/doc/reference_manual/expressions.html< /a>

列表:concat : http://www.erlang.org/doc/man/列表.html

It's an entirely different operation. ++ is ordinary list appending. lists:concat takes a single argument (which must be a list), stringifies its elements, and concatenates the strings.

++ : http://www.erlang.org/doc/reference_manual/expressions.html

lists:concat : http://www.erlang.org/doc/man/lists.html

分开我的手 2024-10-30 13:06:24

大多数列表函数实际上使用“++”运算符:
例如 list:append/2:

源代码定义如下:

-spec append(List1, List2) -> List3 when
      List1 :: [T],
      List2 :: [T],
      List3 :: [T],
      T :: term().

append(L1, L2) -> L1 ++ L2.

Most list functions actually uses the '++' operator:
for example the list:append/2:

The source code defines it as follows:

-spec append(List1, List2) -> List3 when
      List1 :: [T],
      List2 :: [T],
      List3 :: [T],
      T :: term().

append(L1, L2) -> L1 ++ L2.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文