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"
答案 0 :(得分:2)
"he" <> rest
这是模式及其<<"he", rest::binary>>
的语法糖。
如果您的意思是您不了解该模式的工作原理,请详细说明here。
简而言之,该模式被解析为文字&#34;他&#34;后跟0或更多字节。通过此模式将rest
分配给其余字节。
binary
类型仅在模式结尾处允许,以便以下内容无效:"he" <> ll <> "o"
(或<<"he", ll::binary, "o">>
)。