2017-03-19 3 views
2

私はDave ThomasのProgramming Elixirを使っています。リストの章からいくつかの例を試しています。エリクシールスクリプトからの非常に基本的なIExとIEx.pryにエラーが発生する:IExシェルが実行されていますか?

私が言語を勉強しているとき、私はできるだけ基本的には<language executable> <script file>を実行することを好みます。コンソール出力を実行すると

require IEx; 

defmodule MyList do 
    def reduce([], memo, _), do: memo 
    def reduce([head | tail], memo, func) do 
    IEx.pry 
    reduce(tail, func.(head, memo), func) 
    end 
end 

ExUnit.start() 
defmodule MyListTest do 
    use ExUnit.Case 

    def test do 
    assert 10 == MyList.reduce([1,2,3,4], 0, &(&1 + &2)) 
    end 
end 

IO.puts(MyListTest.test()) 

Cannot pry #PID<0.70.0> at reduce.exs:9. Is an IEx shell running? 

私は、私は完全に一部のコア概念を誤解していますと仮定しますが、私この場合、私はreduce.exsのelixir reduce.exs

内容を実行していますよ彼らが何であるか完全にはわからない。

私が期待するのは、プログラムが実行するのがIEx.pryになると、プログラムがiexセッションに落ちるということです。 iexがエリクシールのコアライブラリにあるとすれば、require IExが十分に使用できると思いました。

IEx.pry/3を使用する必要がありますか? iexの別のインスタンスを実行して、どうにかして2つのノードを接続する必要がありますか?

iex reduce.exsを実行してコードを評価するだけでファイルが実行されますが、テスト出力は表示されません。

私が作ったばかげた仮定をすべて修正してください。

答えて

3

IExが実行されている必要があるため、このエラーが発生しています。コマンドiex reduce.exsを使用すると、コードに入力することができます。IEx.pryがソースファイルに格納されます。

そこから実行を続行するには、シェルにrespawnと入力します。あなたが毎回の再帰を許すかどうか聞いてきますが、最終的にテストの結果が表示されます。

テストの出力が手前に表示されない理由は、IEx.pryが実行を停止するため、テスト機能が返されず、IO.putsコールが完了していないためです。

関連する問題