バックグラウンド
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>>, ...]
}
シジルの代わりに文字列が必要だと言っていH
ます。最新バージョンはこの sigil をサポートしているため、これは私を混乱させます。
質問
そこで疑問が生じます。私は何を間違っていますか?どうすれば修正できますか?