我们可以做像
这样的事吗defmodule EmailMatch do
match_email = fn(id) -> Regex.run ~r/[a-zA-Z]+\s*\@[a-zA-Z]+\.[a-z]+/, id end
end
并使用它:
EmailMatch.match_email("bdn@sdkj.net")
虽然上面给出了:
** (UndefinedFunctionError) undefined function EmailMatch.match_email/1
EmailMatch.match_email("bdn@sdkj.net")
答案 0 :(得分:4)
是的,此代码有效,但您无法从模块外部访问该功能,甚至无法从模块内的def
访问该功能。我猜你的意思是“这不行”,因为它对我来说很好。您可以直接在defmodule
:
defmodule EmailMatch do
match_email = fn(id) -> Regex.run ~r/[a-zA-Z]+\s*\@[a-zA-Z]+\.[a-z]+/, id end
IO.inspect match_email.("foo@bar.com")
end
输出:
["foo@bar.com"]
如果您希望此功能仅在模块中的其他def
内可用,则可以使用defp
来定义私有功能。
答案 1 :(得分:-1)
实际上我发现这只是一种语法糖,更容易做到。匿名函数绑定和调用另一个变量并不是我在文档中找到的东西。
defmodule EmailMatch do
@moduledocs """
matching email
"""
def match_email(id), do:Regex.run ~r/[a-zA-Z]+\s*\@[a-zA-Z]+\.[a-z]+/, id
end
我想我将不得不这样做。