2

バックグラウンド

Elixir Desktopを使用した小さなアプリがあります。このアプリは比較的うまく機能し、問題なく起動します。

https://github.com/Fl4m3Ph03n1x/market_manager/tree/master/apps/web_interface

ただし、ダイアライザーがタイプについて不平を言っています。これが誤検知なのか、何か間違ったことをしているのかはわかりません。

問題

MenuBarのアプリケーションには、いくつかの基本的な機能があります。これMenuBarは、私が理解している限りでは、Phoenix LiveView コンポーネントです (関数mountrender関数があるため)。したがって、このコードは、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 をサポートしているため、これは私を混乱させます。

質問

そこで疑問が生じます。私は何を間違っていますか?どうすれば修正できますか?

4

1 に答える 1