繁体   English   中英

从Elixir调用:wxFrame.new时发生FunctionClauseError

[英]FunctionClauseError when calling :wxFrame.new from Elixir

我只有两个问题:)

  1. 怎么了?
  2. 我如何不问Stackoverflow而了解出了什么问题?

药剂代码:

import WxConstants
...
wx = :wx.new
frame = :wxFrame.new(wx, wxID_ANY, "Game of Life", size: {500, 500})

输出:

** (FunctionClauseError) no function clause matching in :wxFrame.new/4
    gen/wxFrame.erl:111: :wxFrame.new({:wx_ref, 0, :wx, []}, -1, "Game of Life", [size: {500, 500}])

WxConstants模块: https : //github.com/ElixirWin/wxElixir

Dogbert已经回答了第一个问题,我会回答第二个问题。

**(FunctionClauseError)在...中没有匹配的功能子句

是Elixir以及其他任何支持函数子句中模式匹配的语言中最常见的错误之一。 考虑这个人为的例子:

defmodule M do
  def test(param) when is_binary(param), do: "binary"
  def test(param) when is_list(param), do: "list"
end
M.test("Hello, world")
#⇒ "binary"
M.test([1, 2, 3])
#⇒ "list"

如果没有可以与给定参数匹配的函数子句,则会发生上述错误:

M.test(42)
#⇒ ** (FunctionClauseError) no function clause matching in M.test/1

就是说,您正在使用的库期望使用其他类型的一个或多个参数。 让我们检查一下:wxFrame.new/4期望:

Parent = wxWindow:wxWindow()
Id = integer()
Title = unicode:chardata()
Option = {pos, {X::integer(), Y::integer()}} | 
         {size, {W::integer(), H::integer()}} | 
         {style, integer()}

第三个参数应该是unicode:chardata() ,它依次是Erlang字符列表,在Elixir中用单引号表示。 因此,@ Dogbert的评论:在“ Game of Life'周围使用单引号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM