我尝试了灵丹妙药,而且出现了这个问题 - 我似乎无法创建一系列浮点数作为边界。
根据Dave Thomas的书,第24页:
范围表示为start..end,其中start和end可以是任何类型......
但是,当我尝试使用浮点数创建范围时,出现错误:
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。
这让我想到了这个问题:
制作一系列浮点数的默认选择是什么,以便我可以检查它是否涵盖给定的数字?