Binary 基于二进制的模式匹配与列表理解

Binary 基于二进制的模式匹配与列表理解,binary,pattern-matching,elixir,list-comprehension,Binary,Pattern Matching,Elixir,List Comprehension,使用列表理解,elixir允许进行如下模式匹配: iex()> for {a,2,c} = ch <- [{1,2,3},{4,5,6},3,4,5], do: c [3] 我很感兴趣的是,是否有可能使用二进制文件执行第一个示例。这就是失败的原因: 有没有办法告诉Elixir在列表理解中显式地将整数视为二进制?事实上,这正是我想要的,当我在for>=中执行时显然不是,任何地方都不能将整数与二进制匹配。好的,这是否意味着理解机制会忽略任何修饰符,例如,这会导致无法将二进制与整数匹配

使用列表理解,elixir允许进行如下模式匹配:

iex()> for {a,2,c} = ch <- [{1,2,3},{4,5,6},3,4,5], do: c 
[3]
我很感兴趣的是,是否有可能使用二进制文件执行第一个示例。

这就是失败的原因:


有没有办法告诉Elixir在列表理解中显式地将整数视为二进制?事实上,这正是我想要的,当我在
for>=中执行
时显然不是,任何地方都不能将整数与二进制匹配。好的,这是否意味着理解机制会忽略任何修饰符,例如,这会导致无法将二进制与整数匹配,然而,我仍然可以使用理解之外的修饰语来进行匹配,如
=
?我不确定我是否遵循。简而言之,理解是一种匹配。不能将整数转换为二进制,因此=100将不起作用。是一个完全不同的东西,它是二进制的。好吧,那么对于{a,2,c}=ch,在你的第二个例子中,你实际上没有做二进制理解。这里有一个列表,而不是二进制文件。它应该是
for>,do:b1
,但仍然将
=ch
添加到模式中不起作用。不确定原因。Elixir肯定有问题,因为
for>,do:b1
iex
中返回
[]
,但在使用
Elixir
elixirc
运行时抛出编译错误。
iex()> for  << b1::size(2), b2::size(3), b3::size(3) >> = <<ch>> <- 'hello', do: b1 
[]
<< b1::size(2), b2::size(3), b3::size(3) >> = <<100>>
"d"
iex(282)> b2
4
iex(283)> b1
1
iex(284)> b3
4
iex(286)> for ch <- 'hello', << b1::size(2), b2::size(3), b3::size(3) >> = <<ch>>,  do: b1
[1, 1, 1, 1, 1]