与字符串匹配的Elixir方法模式匹配

Kot*_*ote 3 elixir pattern-matching

有没有办法在参数匹配中包含String contains/regex?例如,字符串是"发生了一些错误".但我希望它匹配子串"发生错误".我试过这个,但它不起作用:

  defp status({:error, ~r/error happened/}, state) do

  end
Run Code Online (Sandbox Code Playgroud)

Dog*_*ert 6

不可以使用模式匹配或保护功能来完成String包含和Regex匹配.你最好的选择是匹配{:error, error}模式并在函数内部进行字符串匹配,例如cond:

defp status({:error, error}, state) do
  cond do
    error =~ "error happened" -> ...
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

模式匹配可以做的是前缀匹配.如果这对您来说足够好,您可以这样做:

defp status({:error, "error happened" <> _}, state) do
Run Code Online (Sandbox Code Playgroud)

这将匹配以"error happened".开头的任何字符串.