【发布时间】:2021-12-31 14:35:40
【问题描述】:
我正在创建一个新的 Elixir 库,需要使用不同版本的语言来执行。
这个库使用 Erlang :crypto.hmac 函数,但是这个函数在 Erlang OTP 的第 22 版上被 :crypto.mac 取代(具有相同的功能)。
我正在使用以下私有宏来执行较新或较旧的功能:
defmacrop hmac(key, data) do
if System.otp_release() >= "22" do
quote do: :crypto.mac(:hmac, :sha256, unquote(key), unquote(data))
else
quote do: :crypto.hmac(:sha256, unquote(key), unquote(data))
end
end
并以下列方式使用它:
hmac(key, data)
两个问题:
- 这是基于 OTP 发行版执行代码的正确方式吗?
- 有什么更好的方法来解决这个问题?
谢谢。
【问题讨论】: