언어 학습 초기 단계에서 ElixirSips 비디오 시리즈 작업. 나는 언어 변화에 의해 약간 obseleted 인 재료를 치는 것을 계속한다. 이것과 Google/Github 이슈 트래커/SO 트롤 어딘가에서 내 머리를 감싸려고 노력하는 것은 아무데도 유용하지 않습니다. 난 그냥 쉘 명령을 실행해야이 매우 기본적인 모듈이 있습니다 그러나Elixir에서 기본 셸 명령 실행
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은 더 이상 표준 라이브러리의 일부가 아닌 것처럼 보입니다.
System.cmd/3 은 표준 lib에이고, 옵션을 표시하는 문서를 읽는 것이 좋습니다. 그래서 나는 빈 args note |> command |> System.cmd([])
을 전달하고, 내가 돌아 오는 것은 erlang: :enoent
입니다 : 다시 조금 더 신중하고 공정한 문서를 읽은 후에 다시.
그래서 얼랭의 :os.cmd/1
을 사용하려고합니다. 따라서 note |> command |> :os.cmd
, 나는 (FunctionClauseError) no function clause matching in :os.validate/1
이됩니다. 그리고 나는 지금 붙어있다.
내가 비약의 최신 버전에 해당 자습서를 작동하게하는 또 다른 함수를 작성 : 데프 실행'(full_cmd를) do [cmd | args] = String.split (full_cmd, "") System.cmd (cmd, args) end' – ghayes