我有以下代码:
@spec test_pass(String.t) :: (:failed | {:ok, map()})
def test_pass(pass) do
db_user = %{password_hash: @hash_for_foo}
with {:ok, ^db_user} <- Comeonin.Argon2.check_pass(db_user, pass) do
{:ok, db_user}
else
_ -> :failed
end
Run Code Online (Sandbox Code Playgroud)
结束
Dyalizer给了我“无法匹配的错误”:
?my_file?.ex:25: The pattern {'ok', _} can never match the type {'error',<<_:64,_:_*8>>}
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么?我知道它不匹配,而且我实际上不在乎,这就是为什么我with首先使用它的原因。所有不匹配的情况都在中处理else。
我该如何更改自己dialyzer满意的代码?
我不在找@dialyzer {:nowarn_function, …}。我已经尝试过用身体的{:error, _} -> …表情,else但无济于事。
Erlang / Elixir版本(elixir -v):
Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] …Run Code Online (Sandbox Code Playgroud) 我有这个正则表达式:
@disks = $sysconfig =~ /(\d+)\.\d+:(\s+[\w.\/]+){5}\s+\((\w+)\)/ig
Run Code Online (Sandbox Code Playgroud)
如果只有一条线匹配,我会得到类似的东西
1835 x @array
1836 35
1837 ' 520B/sect'
1838 'KXG813JF'
Run Code Online (Sandbox Code Playgroud)
它匹配:
字符串中的第一个数字
"空格然后字母数字 - 句号和斜线"的第五个副本和
最后的字母数字字符串
我不想向引用#2以上和杂波我的阵列,但我也不想写出来,如果重复图形时,我所得到的是一个更简洁的正则表达式(看).
有没有办法说"不反向引用这块"或者我应该只是处理它,当我解析阵列伸到我的计划更多的东西有用?