小编Pat*_* S.的帖子

如何避免Dialyzer在“ with”语句中匹配“ else”的“永远无法匹配”错误?

我有以下代码:

@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)

elixir typechecking dialyzer

8
推荐指数
1
解决办法
1472
查看次数

perl正则表达式可以使用parens但跳过反向引用吗?

我有这个正则表达式:

@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)

它匹配:

  1. 字符串中的第一个数字

  2. "空格然后字母数字 - 句号和斜线"的第五个副本和

  3. 最后的字母数字字符串

我不想向引用#2以上和杂波我的阵列,但我也不想写出来,如果重复图形时,我所得到的是一个更简洁的正则表达式(看).

有没有办法说"不反向引用这块"或者我应该只是处理它,当我解析阵列伸到我的计划更多的东西有用?

regex arrays perl

1
推荐指数
1
解决办法
70
查看次数

标签 统计

arrays ×1

dialyzer ×1

elixir ×1

perl ×1

regex ×1

typechecking ×1