![](/img/trans.png)
[英]Using a value of a map stored in a module attribute in function pattern matching
[英]Calling a function that's stored in a map
我是 Elixir 的新手,所以仍在尝试正确理解模式匹配的工作原理。 我有一个 function 接收map
作为参数。 这个 function 可能有也可能没有icon
键,其中icon
应该是function
。
icon
键时,我想用一个值来调用它,因为它是一个 function。icon
键时,我想要一个默认值。我认为下面的代码可以工作,但它没有:
defp get_icon(%{:icon => icon}), do: icon(@icon_size)
defp get_icon(_), do: Icon.default_icon(@icon_size)
当我尝试调用icon(@icon_size)
时,我收到以下错误消息: undefined function icon/1 (expected HelloWeb.Components.Button to define such a function or for it to be imported, but none are available)
。
我想也许我需要像这样将 arity 传递给icon
: &icon/1
但是,然后,我得到另一个错误,说& is not allowed in matches
。
是否有可能做我在这里想要完成的事情,或者有更好的方法吗?
icon(@icon_size)
是命名 function 的语法。 它将在当前上下文中查找名为 function 的icon/1
(例如,您当前的模块或在您的导入中。)
在调用匿名 function 时,需要加一个点:
icon.(@icon_size)
捕获运算符&
将获取一个名为 function 并从中创建一个匿名 function ,所以这与您想要在这里实现的相反:
f = &String.upcase/1
# is the same as
f = fn x -> String.upcase(x) end
您可以在Function
模块文档或入门指南中查看更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.