我有这个方法
@spec modify_query(Ecto.Query.t) :: Ecto.Query.t
def modify_query(query) do
# modifies a Ecto.Query.t
end
然后我用一个查询链接该方法:
Item
|> where([active: true])
|> order_by([desc: :start])
|> modify_query
该代码工作正常,但显然 fordialyzer
order_by
没有返回 aEcto.Query.t
因为它抱怨:
调用 'modify_query'... 没有 atom() 类型的术语 | 'Elixir.Ecto.Query':t()(带有不透明子项)作为第一个参数
如果我注释掉# |> order_by([desc: :start])
就dialyzer
不会抱怨
我已经通过 iex 测试了以下输出:
Item
|> where([active: true])
|> order_by([desc: :start])
它说它的数据类型是 Ecto.Query:
Term
#Ecto.Query<from r in Item, where: r.active == true, order_by: [desc: r.start]>
Data type
Ecto.Query
那么透析器怎么会抱怨呢?