Elixir - concat和match组合

时间:2018-06-18 17:39:44

标签: elixir

Elixir noob在这里。试图通过官方文档了解基础知识,我偶然发现了一段我不太了解的代码,无法找到明确搜索的方法。

  sqlContext.sql("select a.phys_group_nm, b.group_name from hive_tab1 a , hive_tab1 b where abs(length(a.phys_group_nm) - length(b.group_name)) <= max(length(a.phys_group_nm), length(b.group_name)) * (1-0.6)")

来源:https://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html

我不明白的是,在与&#34;他&#34;模式匹配后,运营商的组合如何运作以及休息如何分配剩余的字符串。我尝试通过如下括号来理解使用优先级:

案例1 - 显然不一样

iex> "he" <> rest = "hello"
"hello"
iex> rest
"llo"

案例2 - 看起来一样,但我仍然不明白它是如何运作的。

iex(1)> "he" <> (rest = "hello")
"hehello"
iex(2)> rest
"hello"

我不明白,因为最初这里的休息是未定义的,这更像下面的代码,这是前面提到的例子之前的文档中的代码。

iex(1)> ("he" <> rest) = "hello"
"hello"
iex(2)> rest
"llo"

1 个答案:

答案 0 :(得分:2)

"he" <> rest这是模式及其<<"he", rest::binary>>的语法糖。

如果您的意思是您不了解该模式的工作原理,请详细说明here

简而言之,该模式被解析为文字&#34;他&#34;后跟0或更多字节。通过此模式将rest分配给其余字节。

binary类型仅在模式结尾处允许,以便以下内容无效:"he" <> ll <> "o"(或<<"he", ll::binary, "o">>)。