2016-02-12 4 views
1

Я невероятно новичок в 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 

ответ

3

У вас не должно быть вложенных модулей для такого простого приложения. Хорошая вещь, которую нужно сделать перед написанием кода, - это подумать о разных вещах, которые вам понадобятся, и о том, как они соотносятся друг с другом. У вас есть номера модулей, и вы хотите добавить, вычесть, разделить и размножить. Это операции, выполняемые по номерам? Поэтому предоставляйте их как публичные функции (операции в конце концов) для вашего модуля Numbers.

.exs файлы - это скрипты Elixir. Это означает, что когда вы загружаете их, они будут выполнять функции, которые вы вызываете внутри файла (а не определения, но такие, как IO.puts, которые у вас есть). Если вы хотите взаимодействовать с модулем вручную, используйте файл .ex.

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 

Это может быть ваша программа-калькулятор. Теперь вам нужно позвонить в консоль (также называемую REPL или Read Eval Print Loop).

iex c "numbers.ex" 

и вызывать функции вручную

alias Numbers, as: Calc 
Calc.add(1, 2) 
Calc.sub(6, 7) 
Calc.mul(2, 4) |> Calc.add(6, 7) 

И вы можете использовать его, как вы хотите. Слово alias означает, что вы можете создать «ярлык» для имени модуля, в этом случае я изменил его на «Calc». Также полезно, если вы получили модули, которые находятся внутри многих каталогов, таких как «ProjectName.SomeOtherName.YourModuleName», а затем вы используете псевдоним и можете просто использовать «YourModuleName» для вызова функций.

+1

Фантастический. Большое спасибо за то, что нашли время. Трудно много узнать о языке в Интернете, он в гору, но сообщество и этот пост (вы сами) очень приветливы. – codedownforwhat

+0

Если вы новичок, я очень рекомендую сообщество Slack для Elixir. Люди там, как правило, очень полезны, милы и приветствуют новых людей. –

+1

Я обязательно включу себя в это.Было бы так хорошо научиться этому быстрее. Мой энтузиазм превосходит мою способность изучать язык почти ежедневно. Благодаря! – codedownforwhat

4
  1. Зачем вам вложенные модули? Вы можете применить все эти методы непосредственно к модулю Numbers. И назовите их, как Numbers.add(1, 2)
  2. Запустите его как iex add.exs, чтобы иметь возможность вызывать эти методы вручную.
  3. Какой калькулятор вы хотите получить? Хотите ли вы внедрить RPN или просто получить результат, например Code.eval_string("2+3*5") |> elem(0)
+0

1. Это хороший момент, который я не знал. Я не знал о Модулях, которые я узнал об этом, читая здесь. (http://elixirschool.com/lessons/basics/composition/) 2. Есть ли хорошее руководство по сохранению и управлению этими вещами в Elixir? 3. Просто очень простой калькулятор, который я могу запустить из командной строки. – codedownforwhat

+0

2. https://pragprog.com/book/elixir/programming-elixir очень хороший. Вы также можете запустить 'iex -h', чтобы просмотреть все параметры. В документах есть также интересная информация: http://elixir-lang.org/docs/stable/iex/IEx.html 3. Не могли бы вы привести примеры использования? –

Смежные вопросы