背景
我有一个使用Elixir Desktop的小应用程序。这个应用程序运行相对良好,启动时没有问题:
https://github.com/Fl4m3Ph03n1x/market_manager/tree/master/apps/web_interface
然而,我有透析器抱怨类型。我不确定这是假阳性,还是我做错了什么。
问题
我的应用程序中有一个MenuBar
,具有一些基本功能。据我所知,这个MenuBar
是Phoenix LiveView组件(因为它有mount
和render
函数(。因此,对于Phoenix和LiveView:的大多数用户来说,这段代码应该很熟悉
defmodule WebInterface.Live.MenuBar do
@moduledoc """
Menubar that is shown as part of the main Window on Windows/Linux. In
MacOS this Menubar appears at the very top of the screen.
"""
use Desktop.Menu
alias Desktop.{Menu, Window}
@impl Menu
def render(assigns) do
~H"""
<menubar>
<menu label="File">
<hr/>
<item onclick="quit">Quit</item>
</menu>
</menubar>
"""
end
@impl Menu
def handle_event("quit", menu) do
Window.quit()
{:noreply, menu}
end
@impl Menu
def mount(menu), do: {:ok, menu}
@impl Menu
def handle_info(:changed, menu), do: {:noreply, menu}
end
这里的问题是Dialyzer抱怨我的渲染函数:
Type mismatch for @callback render/1 in Desktop.Menu behaviour.
Expected type:
binary()
Actual type:
%Phoenix.LiveView.Rendered{
:dynamic => (_ -> []),
:fingerprint => 15_721_876_439_225_774_806_119_511_245_371_375_581,
:root => true,
:static => [<<_::1480>>, ...]
}
它说它需要一个String而不是H
sigil。这让我很困惑,因为最新版本确实支持这个sigil。
问题
所以问题来了。我做错了什么?我该如何解决?
答案
原来这是库中的一个错误。
当我的PR被接受时,修复程序已经在master中:https://github.com/elixir-desktop/desktop/issues/17