官术网_书友最值得收藏!

  • Mastering Elixir
  • André Albuquerque Daniel Caixinha
  • 242字
  • 2021-08-05 10:42:47

Pattern matching on binaries and strings

The following example shows how you can use pattern matching on binaries:

iex> <<first_byte, second_byte>> = <<100, 200>>
<<100, 200>>
iex> first_byte
100
iex> second_byte
200

As previously stated when describing binaries, this can be incredibly helpful when you're dealing with bytes directly, such as parsing a packet from a given network protocol. By applying pattern matching to binaries, you can extract bits or bytes as necessary, while your code remains extremely expressive.

Since strings are just binaries underneath, we can use the same strategy as we did in the preceding snippet:

iex> <<first_byte, second_byte>> = "YZ"
"YZ"
iex> first_byte
89
iex> second_byte
90

However, this isn't very helpful when dealing with strings, as you're getting the decimal code of the characters in UTF-8 (also, as UTF-8 is a variable width encoding, a code point may take more than one byte). To match on strings, the best approach is to use the functions from the String module, such as starts_with?, ends_with?, or contains?.

As we've explained in the beginning of this section, everything in Elixir is an expression, and in pattern matching, when the match succeeds, the right-hand side of the expression is returned. Due to this behavior and taking into account that Elixir rebinds the variables on the left-hand side, we can write expressions such as the following one, binding multiple variables to the same value:

iex> x = y = 100
100
iex> x
100
iex> y
100
主站蜘蛛池模板: 光山县| 比如县| 衡南县| 白城市| 含山县| 丰城市| 苗栗市| 藁城市| 苍溪县| 富民县| 华池县| 庆安县| 方正县| 兰州市| 磐石市| 保康县| 富锦市| 陵川县| 上饶市| 石楼县| 偏关县| 隆德县| 五家渠市| 龙陵县| 台南市| 三江| 合作市| 新竹县| 蒙城县| 台前县| 麦盖提县| 桑植县| 聂拉木县| 北川| 宣汉县| 汽车| 霍城县| 衡阳市| 宜春市| 阿瓦提县| 太和县|