Конкатенация строк: двоичный синтаксис v. Оператор <> - PullRequest
0 голосов
/ 13 мая 2019

В эликсире есть следующие эквиваленты:

 str1 = "hello "
 str2 = "world"

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

??

Ответы [ 2 ]

4 голосов
/ 13 мая 2019

Да. Оператор <>/2 - это макрос, преобразующий код в специальную форму <<>>.

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

Выход:

"<<str1::binary, str2::binary>>"
1 голос
/ 13 мая 2019

Да, они эквивалентны.

В Elixir тип string представляет собой двоичный код в кодировке UTF-8 , поэтому "hello" равен <<"h", "e", "l", "l", "o">> или <<104, 101, 108, 108, 111>>.

Операция конкатенации строк на самом деле является оператором двоичной конкатенации, поэтому

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