elixir - float 范围

标签 elixir

我正在尝试 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。看来我可以使用 abc 构建一个范围,如上所示(这不再被认为是合法的?),但是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/

相关文章:

email - 如何使用 Bamboo with Phoenix 修复 'render/2 is undefined' 错误

pattern-matching - 我可以在这个 Elixir 匿名函数中避免元组参数吗?

elixir - 如何在Phoenix框架模板中渲染arc_ecto图像?

syntax - Elixir 宏允许的语法是什么?

elixir - 生成N个自然数的序列

elixir - `Ecto.Schema.Metadata` 的目的是什么? (即 `__meta__` 字段)

Mox 库错误 : module Myapp. MyModule 不是一种行为,请将行为传递给:for

stream - 使用自定义分块函数分块流

phoenix-framework - Phoenix + Addict - POST 操作的跨域错误

elixir - |> lix剂中的管道运算符如何工作?