【问题标题】:Why doesn't Elixir have a Math module?为什么 Elixir 没有数学模块?
【发布时间】:2016-04-14 20:20:32
【问题描述】:

我想知道为什么 Elixir 没有数学模块。

我知道我们可以使用 Erlang math: 模块来写这个:

alias :math, as: Math

但是,将那一行放在我们的 Elixir 代码中是一种好习惯吗?

iex 中它似乎可以工作:

iex(1)> alias :math, as: Math
nil
iex(2)> Math.pi()
3.141592653589793
iex(3)> Math.pow(3, 2)
9.0

唉,很明显我们无法以 Elixir 的方式访问文档:

iex(4)> h(Math)
:math is an Erlang module and, as such, it does not have Elixir-style docs

【问题讨论】:

  • 我们为什么要复制已经过测试和证明的现有 Erlang 功能?这样做的显着优势在哪里?
  • 一旦我阅读了@josevalim 的回答,复制模块毫无意义。就 Erlang 而言,Elixir 可以使用 Erlang 中的所有内容,因此如果您不更改任何内容,就没有必要像那样克隆这些模块。

标签: elixir


【解决方案1】:

但是,将那一行放在我们的 Elixir 代码中是一种好习惯吗?

是的。最后,一切都被翻译成 Erlang AST,然后编译成 BEAM 字节码。我们既不能否认也不能忘记 Elixir 中 Erlang 的传承。

【讨论】:

  • 我会说“不”,因为直接调用 erlang 模块并没有问题。另外,通过不设置线,您不会混淆您正在使用 erlang 模块,因为您可能无论如何都不想要这种抽象。
【解决方案2】:

实际上,它们有很多当前在 erlang 中的模块,但在 elixir 中不存在。将它们全部导入没有多大意义,因为相应的 erlang 模块可用,并且在 elixir 中也很容易使用它们。

同样来自docs

Elixir 在同一虚拟机中运行,并且与 OTP 兼容。不仅如此,Elixir 中也可以使用 Erlang 生态系统中可用的所有工具和库,这仅仅是因为从 Elixir 调用 Erlang 没有转换成本,反之亦然。

至于文档Elixir还是比较新的,大家都是working on it。您应该很快就会在 iex 中获得 erlang 文档。 https://github.com/elixir-lang/elixir/issues/3589

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2019-10-24
    • 1970-01-01
    相关资源
    最近更新 更多