На самом раннем этапе изучения языка и работы с сериями видеороликов ElixirSips. Я продолжаю сталкиваться с вещами, которые были слегка искажены языковыми изменениями. Пытаясь обернуть голову вокруг этого, и треки Google/Github для отслеживания/трассировки SO не принесут мне ничего полезного. У меня есть этот очень простой модуль, который должен просто запускать команду оболочки:
defmodule QuickieSynth.Sound do
def command(note) do
"play -qn synth 2 pluck #{note}"
end
def play(note) do
note |> command |> System.cmd
end
end
Однако, когда этот файл скомпилирован и запущены тесты, я получаю ошибку аргумента; достаточно справедливо - System.cmd/1, похоже, больше не входит в стандартную библиотеку lib.
System.cmd/3 находится в стандартной библиотеке, и чтение документов, указанных в параметрах, является необязательным. Поэтому я пропускаю пустые args note |> command |> System.cmd([])
, а то, что я получаю, это erlang: :enoent
: снова после чтения документов немного более тщательно, достаточно справедливо.
Итак, я пытаюсь использовать Erlang :os.cmd/1
, поэтому note |> command |> :os.cmd
, и я получаю (FunctionClauseError) no function clause matching in :os.validate/1
. И я теперь застрял.