Elixir 1.6.0中Bitstring收集代码报错,1.5.3运行正常
Elixir 1.6.0 vs 1.5.3:
for Comprehension Bitstring into Argument Error 我最近碰到个头疼的Elixir版本兼容性问题:一段在1.5.3里运行正常的for推导式代码,到了1.6.0里直接抛出了参数错误。
问题代码
for i <- 7..0, into: <<>>, do: if i in [0, 1], do: <<1::1>>, else: <<0::1>>
不同版本的表现
- Elixir 1.5.3:运行后返回预期结果
<<3>>(因为循环生成的二进制位最后两位是1,组合起来对应十进制的3) - Elixir 1.6.0:直接抛出错误:
** (ArgumentError) argument error :erlang.iolist_to_binary([[[[[[[["" | <<0::size(1)>>] | <<0::size(1)>>] | <<0::size(1)>>] | <<0::size(1)>>] | <<0::size(1)>>] | <<0::size(1)>>] | <<1::size(1)>>] | <<1::size(1)>>])
排查情况
我仔细查阅了Elixir 1.6.0的官方更新日志,没找到任何和for推导式处理二进制into参数相关的变更说明;也浏览了Elixir代码库的相关部分,暂时没发现异常点。目前已经在官方仓库提交了Issue跟进这个问题,后续会持续关注进展。
内容的提问来源于stack exchange,提问作者meatherly
相关产品推荐
相关产品推荐

