ここには、組み込み関数と全く同じ名前の別の関数を呼び出す関数で2つのブレークポイントを持つ単純なモジュールがあります。get/1
とput/2
同じ名前のエリクサーデバッガーが私の代わりに組み込み関数を呼び出す理由
put/2
を内蔵実行
get/1
にデバッガ結果から
get/1
呼び出し、
iex(1)> Test.call_get
Break reached: Test.call_get/0 (lib/test.ex:7)
5: end
6: def call_get() do
7: require IEx; IEx.pry
8: get("k")
9: end
pry(1)> get("a")
:undefined
pry(2)> Test.get("a")
Doing get
:ok
それが見えるように:
defmodule Test do
def call_put() do
require IEx; IEx.pry
put("k", "v")
end
def call_get() do
require IEx; IEx.pry
get("k")
end
def put(_k, _v)do
IO.puts("Doing put")
end
def get(_k) do
IO.puts("Doing get")
end
end
シェルでそれを実行しますモジュール。 正しく機能させるには、関数呼び出しの名前空間を設定する必要があります。誰も私にこの行動を説明できますか?
私は、現在のモジュールの機能が 'IEx.pry'セッションで自動的に"インポート "されるとは思いません。セッションの開始時に 'import test'を実行するだけです。 – Dogbert