In einem sehr frühen Stadium des Erlernens der Sprache und Arbeiten durch die ElixirSips-Serie von Videos. Ich treffe immer wieder Sachen, die durch Sprachänderungen leicht obsletiert wurden. Der Versuch, meinen Kopf darum zu wickeln, und Google/Github Problem Tracker/SO Trawling bringt mich nirgends nützlich. Ich habe diese sehr Basismodul, das nur einen Shell-Befehl ausgeführt werden soll:Ausführen eines grundlegenden Shell-Befehls in 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
Wenn jedoch diese Datei kompiliert und die Tests ausgeführt, erhalte ich ein Argument Fehler; Fair genug - System.cmd/1 scheint nicht mehr Teil der Standardbibliothek zu sein.
System.cmd/3 ist in der Standardbibliothek, und das Lesen der Dokumente angegeben, die Optionen sind, nun, optional. Also gebe ich leere Argumente note |> command |> System.cmd([])
, und was ich zurückbekomme, ist erlang: :enoent
: wieder nach dem Lesen der Dokumente ein wenig sorgfältiger, fair genug.
Also versuche ich Erlang :os.cmd/1
zu verwenden, also note |> command |> :os.cmd
, und ich bekomme (FunctionClauseError) no function clause matching in :os.validate/1
. Und ich bin jetzt festgefahren.
ich eine andere Funktion schreiben auf neueren Versionen von Elixier, das Tutorial Arbeit zu machen: 'def laufen (full_cmd) do [cmd | args] = String.split (full_cmd, "") System.cmd (cmd, args) Ende' – ghayes