Оператор по модулю в эликсире - PullRequest
0 голосов
/ 20 февраля 2019

Как использовать оператор по модулю в Elixir?

Например, в Ruby вы можете сделать:

5 % 2 == 0

Чем он отличается от оператора по модулю Ruby?

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Использование rem/2 см .: https://hexdocs.pm/elixir/Kernel.html#rem/2 Итак, в Elixir ваш пример становится:

rem(5,2) == 0

, который возвращает false

Кстати, что вы написали, используя %в эликсире просто начинается комментарий до конца строки.

0 голосов
/ 24 апреля 2019

Использование Integer.mod/2, см .: https://hexdocs.pm/elixir/Integer.html#mod/2

iex>Integer.mod(-5, 2)
1
0 голосов
/ 20 февраля 2019

Для целых чисел используйте Kernel.rem/2:

iex(1)> rem(5, 2)
1
iex(2)> rem(5, 2) == 0
false

Из документов:

Вычисляет остаток от целочисленного деления.

rem/2 использует усеченное деление, что означает, что результат всегда будет иметь знак dividend.

Вызывает исключение ArithmeticError, если один из аргументов не является целым числом, или когдаdivisor равно 0.

Основные различия по сравнению с Ruby:

  1. rem работает только с целыми числами, но % меняет свое поведениеполностью зависит от типа данных.
  2. Знак отрицательный для отрицательных дивидендов в эликсире (такой же, как у Руби remainder):

Рубин:

irb(main):001:0> -5 / 2
=> -3
irb(main):002:0> -5 % 2
=> 1
irb(main):003:0> -5.remainder(2)
=> -1

Эликсир:

iex(1)> -5 / 2
-2.5
iex(2)> rem(-5, 2)
-1

Эликсир rem просто использует rem Эрланга, поэтому этот связанный вопрос Эрланга также может быть полезен.

...