Elixirの文字列結合にはいくつかの方法あります
iolist
として処理すると効率よく文字列結合できるそうです
- What is an iolist? What is a string? by Nathan Long
- ElixirConf 2019 - High Performance String Processing Scripts in Elixir - by Johanna Larsson
- Elixir and IO Lists, Part 2: IO Lists in Phoenix by Nathan Long
IO.puts/2を使った例
a = "Hello"
b = "World"
# binary 1
IO.puts( a <> " " <> b )
# binary 2
IO.puts( "#{a} #{b}" )
# iolist 1
IO.puts( [a, " ", b] )
# iolist 2
IO.puts( :io_lib.format("~s ~s", [a, b]) )
# 結果は同じ
Hello World
:ok
:io_lib.format/2は使い方によってはコードを見やすくできる場合があるとおもいます
記号の意味は:io.fwrite/3のドキュメントにあります
例としてNervesMOTDのコードでいくつか出てきます
EExを使った例
a = "Hello"
b = "World"
# binary 1
EEx.compile_string("<%= a <> \" \" <> b %>") |> Code.eval_quoted(a: a, b: b)
# binary 2
EEx.compile_string("<%= \"#{a} #{b}\" %>") |> Code.eval_quoted(a: a, b: b)
# iolist 1
EEx.compile_string("<%= [a, \" \", b] %>") |> Code.eval_quoted(a: a, b: b)
# iolist 2
EEx.compile_string("<%= :io_lib.format(\"~s ~s\", [a, b]) %>") |> Code.eval_quoted(a: a, b: b)
# 結果は同じ
{"Hello World",
[{:b, "World"}, {{:arg0, EEx.Engine}, "Hello World"}, {:a, "Hello"}]}