我怎么能在Elixir中制作这个计算器更好?

时间:2016-02-12 06:48:09

标签: elixir

在学习它方面,我对Elixir非常陌生,我来自没有编程背景。

有没有更好的方法可以编写函数来在Elixir中执行计算器?另外如何在不运行elixir add.exs的情况下从命令行单独调用这些?

defmodule Numbers do

  defmodule Addition do
    def add(a, b) do
      a + b
    end
  end

  defmodule Subtract do
    def sub(a, b) do
      a - b
    end
  end

  defmodule Divide do
    def div(a, b) do
      a / b
    end
  end

  defmodule Multiply do
    def mul(a, b) do
      a * b
    end
  end

end


IO.puts Numbers.Addition.add(1, 2)
IO.puts Numbers.Subtract.sub(1, 2)
IO.puts Numbers.Divide.div(1, 2)
IO.puts Numbers.Multiply.mul(1, 2)

输出

CPUs-MacBook-Air:lib cpu$ elixir add.exs
3
-1
0.5
2

2 个答案:

答案 0 :(得分:4)

  1. 为什么需要嵌套模块?您可以将所有这些方法直接放到Numbers模块中。并将其称为Numbers.add(1, 2)
  2. 将其作为iex add.exs运行,以便能够手动调用这些方法。
  3. 你想要什么样的计算器?您想要实施RPN还是只获得Code.eval_string("2+3*5") |> elem(0)
  4. 等结果

答案 1 :(得分:3)

对于这样一个简单的应用程序,你不应该有真正的嵌套模块。在编写代码之前要做的一件好事就是要考虑您需要的不同内容以及它们之间的相互关系。你有一个模块编号,你想要加,减,除和乘。这些是对数字进行的操作吗?因此,将它们作为公共函数(毕竟是操作)提供给Numbers模块。

.exs文件是Elixir脚本。这意味着当你加载它们时,它们将执行你在文件中调用的函数(不是定义,而是像那里的IO.puts那样)。如果要手动与模块交互,请使用.ex文件。

Meteor.http.put('http://192.168.178.98:8080/test', {
    content: "1",
    headers: {
        "content-type": "text/plain"
    }
}, function(err, res) {

});

这可以是您的计算器程序。现在您需要将其调用到控制台(也称为REPL或Read Eval Print Loop)。

defmodule Numbers do

  def add(a, b) do
    a + b
  end

  def sub(a, b) do
    a - b
  end

  def div(a, b) do
    a / b
  end

  def mul(a, b) do
    a * b
  end
end

并手动调用函数

iex c "numbers.ex"

你可以随意使用它。别名单词表示您可以为模块名称创建“快捷方式”,在这种情况下,我将其更改为“Calc”。如果你的模块位于许多目录中,例如“ProjectName.SomeOtherName.YourModuleName”,那么你也可以使用它,并且只需使用“YourModuleName”来调用函数。