2

私は Elixir で Python を使用しようとしており、次の機能コードを作成しました (ここで作成しているリポジトリを見つけることができます: https://github.com/arthurcolle/elixir_with_erlport )

defmodule Snake do
  use Application

  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
      # Define workers and child supervisors to be supervised
      # worker(Snake.Worker, [arg1, arg2, arg3]),
    ]

    opts = [strategy: :one_for_one, name: Snake.Supervisor]
    Supervisor.start_link(children, opts)
  end

  def py do
    {:ok, pp} = :python.start()
    :python.call(pp, :__builtin__, :print, ["hey there"])
  end
end

を実行iex -S mix runして Snake.py と入力すると、次の出力が得られます。

"hey there" :undefined

わかりました。

次に、上記の 2 行を次のように置き換えて、Python の現在のバージョンを出力するようにします。

{:ok, pp} = :python.start() :python.call(pp, :sys, :version, [])

しかし、実行すると、このアリティエラーが発生します

** (FunctionClauseError) no function clause matching in :erlport.call/5 src/erlport.erl:87: :erlport.call(#PID<0.108.0>, :sys, 'version.__str__', [], [])

私の呼び出しは :erlport.call/4 だけで、最後に 1 つのリストがあるため、これは私には意味がありません (それが言っているように 2 ではありません)。

4

1 に答える 1

2
{:ok, pp} = :python.start_link()
:python.call(pp, :sys, String.to_atom("version.__str__"), [])
于 2015-04-27T08:38:51.603 に答える