我正在尝试 Elixir,并且出现了这个问题 - 我似乎无法创建一系列 float 作为边界。
根据 Dave Thomas 的书,第 24 页:
Ranges are represented as start..end, where start and end can be any type...
但是,当我尝试使用 float 创建范围时,出现错误:
iex(1)> 1.1..3.1
** (ArgumentError) ranges (left .. right) expect both sides to be integers, got: 1.1 .. 3.1
(elixir) expanding macro: Kernel.../2
iex:1: (file)
我认为有一个解决办法:
iex(2)> a = 1.1
1.1
iex(3)> b = 3.1
3.1
iex(4)> a..b
1.1..3.1
但是,在后面的情况下,in
运算符无法返回我直观期望的值:
iex(5)> 2.0 in a..b
false
我显然在这里遗漏了一些东西。有人能指出我正确的方向吗?
更新。分配 c = a..b
无法解决问题:
$ iex
Erlang/OTP 18 [erts-7.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Interactive Elixir (1.1.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> a = 1.1
1.1
iex(2)> b = 3.1
3.1
iex(3)> c = a..b
1.1..3.1
iex(4)> 2.0 in c
false
更新 2。看来我可以使用 a
、b
和 c
构建一个范围,如上所示(这不再被认为是合法的?),但是not using macro ,从 1.1 开始。
这给我留下了这个问题:
创建一系列 float 以便我可以检查它是否涵盖给定数字的默认选择是什么?
最佳答案
我有 Elixir 1.0.4,我可以像 1.2 in a..b
那样进行检查。
由于您使用的是 Elixir 1.1.1,Elixir 1.1 可能添加了一项不允许非整数范围的检查。
本期,Fix ranges to only accept integers as first and last elements ,提供详细信息。
关于elixir - float 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34383303/