Ответ 1
EDIT На главной ветке Elixir компилятор будет предупреждать, если функция передана без круглых скобок, если есть аргументы.
Это проблема приоритета, которая может быть зафиксирована с явными скобками:
price
|> to_string
|> String.replace(".", ",")
|> String.replace(~r/,(\d)$/, ",\\1 0")
|> String.replace(" ", "")
Поскольку вызовы функций имеют более высокий приоритет, чем оператор |>
, ваш код будет таким же, как:
price
|> to_string
|> String.replace(".",
("," |> String.replace ~r/,(\d)$/,
(",\\1 0" |> String.replace " ", "")))
Что, если мы заменим последнее предложение:
price
|> to_string
|> String.replace(".",
("," |> String.replace ~r/,(\d)$/, ".\\10"))
И снова:
price
|> to_string
|> String.replace(".", ",")
Должен объяснить, почему вы получили этот результат.