我在嘗試仙丹,而且這個問題出現了 - 我似乎無法創建一系列浮點數作爲邊界。浮點數的範圍
按照戴夫·托馬斯的書,第24頁:
Ranges are represented as start..end, where start and end can be any type...
然而,當我嘗試使用浮點數來創建範圍,我得到一個錯誤:
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
運算符無法ret甕值我直覺地預期:
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
構建一個範圍,如上所示(它不再被認爲是合法的?),但是從1.1開始可以使用not using macro。
這給我留下了這樣的疑問:
什麼是默認選擇,在製造了一系列浮點數的這樣,如果它涵蓋了給定數量,我可以檢查?
它適用於我(Elixir(1.0.4)) - 您的代碼的所有版本 –
考慮你要求的。該範圍有一個隱含的步驟1.如果你給它一個開始和結束,它不能分開地用1的步驟分開覆蓋會發生什麼?警告?錯誤?您似乎也認爲範圍應該是連續的。我得到的印象是,它實際上更多的是一組離散值。這不是從s到e的連續範圍,而是更像[s,s + 1,s + 2。 。 。 e-2,e-1,e]。所以即使我的範圍是1..3,如果我問2.5是否在範圍內,它將返回false。或者使用你的例子,我希望c中的2.1是真的,但不是2.0。 –
@OnorioCatenacci你是對的。我誤將範圍視爲連續的東西。我只是這樣,因爲名字暗示了這一點。如果實現不是連續的,我現在理解這種情況 - 只需手動檢查邊界即可實現我需要的實現,例如, 'a <2.0&2.0 gmile