字符串串联:二进制语法v。运算符<>

时间:2019-05-13 00:18:46

标签: elixir

在长生不老药中,以下等价物:

 str1 = "hello "
 str2 = "world"

 result = str1 <> str2
 result = <<str1::binary, str2::binary>>

??

2 个答案:

答案 0 :(得分:4)

是的。 <>/2运算符是一个宏,它将代码转换为<<>>特殊形式。

quote do str1 <> str2 end
|> Macro.expand(__ENV__)
|> Macro.to_string()

输出:

"<<str1::binary, str2::binary>>"

答案 1 :(得分:1)

是的,它们是等效的。

在Elixir中,string类型是UTF-8 encoded binary,因此"hello"<<"h", "e", "l", "l", "o">><<104, 101, 108, 108, 111>>

字符串串联操作实际上是二进制串联运算符,所以

str1 <> str2 == <<str1::binary>> <> <<str2:binary>> == <<str1::binary, str2::binary>>