0
我運行下面的代碼實現協議:錯誤 - 在靈藥
ExHubic.Request.request({:get, "/account", nil, :hubic}, ExHubic)
,並得到以下錯誤:
** (Protocol.UndefinedError) protocol ExHubic.Request not implemented for {:get, "/account", nil, :hubic}
(ex_hubic) lib/request.ex:1: ExHubic.Request.impl_for!/1
(ex_hubic) lib/request.ex:6: ExHubic.Request.request/2
此錯誤消息建議,我認爲該協議未實現對於定義爲@type t :: {atom, String.t, any, :hubic}
的ExHubic.Query.Hubic.t
類型
這可能是我創建的類型的問題,但我看不到它。
一些背景:
defprotocol ExHubic.Request do
@moduledoc false
@spec request(query :: ExHubic.Query.t, client :: atom)
:: ExHubic.Query.http_query_t
def request(query, client)
end
defimpl ExHubic.Request, for: ExHubic.Query.Hubic do
@spec request(query :: ExHubic.Query.Hubic.t, client :: atom)
:: {:ok, ExHubic.Client.response_t} | {:error, ExHubic.Client.response_t}
def request({method, uri, params, :hubic} = query, client) do
implementation_details
end
end
defmodule ExHubic.Query do
@moduledoc false
@type t :: {atom, String.t, any, atom}
end
defmodule ExHubic.Query.Hubic do
@type t :: {atom, String.t, any, :hubic}
@spec account() :: __MODULE__.t
def account(), do: {:get, "/account", :nil, :hubic}
end
我碰到了我以前的嘗試的問題。你的答案可能是正確的答案,但我還沒有能夠成功實現這一點。我不會在電腦桌上呆幾周。關於元組不允許的一點是絕對正確的,並且使我走上了正確的道路。但是我還不確定查詢或客戶端應該是第一個參數。當我回到辦公桌時,我需要進一步調查。謝謝。 –
將元組更改爲修復它的結構。爲參考目的:文件:[查詢](https://github.com/stephenmoloney/ex_hubic/blob/master/lib/query/hubic.ex),[協議](https://github.com/stephenmoloney/ex_hubic /blob/master/lib/request.ex),[Protocol Impl](https://github.com/stephenmoloney/ex_hubic/blob/master/lib/request/hubic/request.ex) –