Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 如何将OTP中的模块包含到我的mix项目中?_Erlang_Elixir_Otp - Fatal编程技术网

Erlang 如何将OTP中的模块包含到我的mix项目中?

Erlang 如何将OTP中的模块包含到我的mix项目中?,erlang,elixir,otp,Erlang,Elixir,Otp,我不熟悉长生不老药和OTP 我想为我的服务器使用GenServer.behavior,但由于某些原因elixir找不到它。我已经创建了一个混合项目,但是当我键入mixcompile时,我得到了以下错误 ==文件lib/讲师3.ex上的编译错误== **(CompileError)lib/讲师3.ex:2:module GenServer.Behavior未加载且找不到 (elixir)扩展宏:Kernel.use/1 lib/讲师3.ex:2:缓存(模块) 我想我必须包括这个模块,但是怎么做呢

我不熟悉长生不老药和OTP

我想为我的服务器使用
GenServer.behavior
,但由于某些原因elixir找不到它。我已经创建了一个混合项目,但是当我键入
mixcompile
时,我得到了以下错误

==文件lib/讲师3.ex上的编译错误== **(CompileError)lib/讲师3.ex:2:module GenServer.Behavior未加载且找不到 (elixir)扩展宏:Kernel.use/1 lib/讲师3.ex:2:缓存(模块)

我想我必须包括这个模块,但是怎么做呢

mix.exs:

defmodule LECTURE3.Mixfile do
  use Mix.Project

  def project do
    [app: :lecture3,
     version: "0.1.0",
     elixir: "~> 1.3",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps()]
  end

  def application do
    [applications: [:logger]]
  end

  defp deps do
    []
  end
end
defmodule Cache do
 use GenServer.Behaviour
 def handle_cast({:put, url, page}, {pages, size}) do
    new_pages = Dict.put(pages, url, page)
    new_size = size + byte_size(page)
    {:noreply, {new_pages, new_size}}
 end
 def handle_call({:get, url}, _from, {pages, size}) do
    {:reply, pages[url], {pages, size}}
 end

 def handle_call({:size}, _from, {pages, size}) do
    {:reply, size, {pages, size}}
 end
 def start_link do
    :gen_server.start_link({:local,:cache}, __MODULE__, {HashDict.new, 0}, [])
 end
 def put(url, page) do
    :gen_server.cast(:cache, {:put, url, page})
 end
 def get(url) do
    :gen_server.call(:cache, {:get, url})
 end
 def size do
    :gen_server.call(:cache, {:size})
 end
end

defmodule CacheSupervisor do
 def init(_args) do
    workers = [worker(Cache, [])]
    supervise(workers, strategy: :one_for_one)
 end
 def start_link(domain) do
    :supervisor.start_link(__MODULE__, [domain])
 end
end

Enum.map(["de","edu", "com" ,"it"], fn(x)-> CacheSupervisor.start_link(x)
end)
讲师3.ex:

defmodule LECTURE3.Mixfile do
  use Mix.Project

  def project do
    [app: :lecture3,
     version: "0.1.0",
     elixir: "~> 1.3",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps()]
  end

  def application do
    [applications: [:logger]]
  end

  defp deps do
    []
  end
end
defmodule Cache do
 use GenServer.Behaviour
 def handle_cast({:put, url, page}, {pages, size}) do
    new_pages = Dict.put(pages, url, page)
    new_size = size + byte_size(page)
    {:noreply, {new_pages, new_size}}
 end
 def handle_call({:get, url}, _from, {pages, size}) do
    {:reply, pages[url], {pages, size}}
 end

 def handle_call({:size}, _from, {pages, size}) do
    {:reply, size, {pages, size}}
 end
 def start_link do
    :gen_server.start_link({:local,:cache}, __MODULE__, {HashDict.new, 0}, [])
 end
 def put(url, page) do
    :gen_server.cast(:cache, {:put, url, page})
 end
 def get(url) do
    :gen_server.call(:cache, {:get, url})
 end
 def size do
    :gen_server.call(:cache, {:size})
 end
end

defmodule CacheSupervisor do
 def init(_args) do
    workers = [worker(Cache, [])]
    supervise(workers, strategy: :one_for_one)
 end
 def start_link(domain) do
    :supervisor.start_link(__MODULE__, [domain])
 end
end

Enum.map(["de","edu", "com" ,"it"], fn(x)-> CacheSupervisor.start_link(x)
end)

实际上,
GenServer
behavour
,所以只需尝试
使用GenServer
。Elixir中的GenServer是Erlang中
gen_server
的包装器,它为未定义的函数提供了默认值(因此在Erlang中必须始终定义6个函数,而在Elixir中则不能)


您不必显式地使用Erlang模块
gen_server
,而是使用
GenServer
。签出。

实际上
GenServer
行为
,所以请尝试简单地
使用GenServer
。Elixir中的GenServer是Erlang中
gen_server
的包装器,它为未定义的函数提供了默认值(因此在Erlang中必须始终定义6个函数,而在Elixir中则不能)


您不必显式地使用Erlang模块
gen_server
,而是使用
GenServer
。退房。

谢谢你的帮助。我会接受你的回答,谢谢你的帮助。我稍后会接受你的回答