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

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
主站蜘蛛池模板: 双峰县| 梅州市| 香格里拉县| 祁东县| 冷水江市| 多伦县| 侯马市| 托克逊县| 东辽县| 同仁县| 泉州市| 澄江县| 邹平县| 滦平县| 台山市| 会宁县| 龙陵县| 墨玉县| 襄垣县| 佳木斯市| 崇仁县| 青岛市| 汉寿县| 资兴市| 筠连县| 鄂托克前旗| 湘潭县| 峨边| 革吉县| 浦城县| 霍林郭勒市| 海晏县| 扬州市| 固镇县| 锡林郭勒盟| 芜湖市| 巨野县| 海林市| 英超| 凤庆县| 渑池县|