In einem Paket für eine MongoDB driver, ich brauchte eine Funktion, um eine eindeutige Dokument-ID zu generieren.Erlang: now() in V18 veraltet, was ist der beste Übergang
Diese Funktion verwendet :erlang.now()
die
ich Hilfe suchen, wie man wandern, aber kein Erfolg.
Meine eigentliche Code (verkürzt):
defmodule MyModule_v17 do
use Bitwise, only_operators: true
def gen_trans_prefix do
{gs, s, ms} = :erlang.now
(gs * 1000000000000 + s * 1000000 + ms) &&& 281474976710655
end
end
Beste, was ich kam mit:
defmodule MyModule_v18 do
use Bitwise, only_operators: true
Kernel.if Keyword.get(:erlang.module_info, :exports) |> Enum.any?(fn({:system_time, 1}) -> true; (_) -> false end) do
def gen_trans_prefix do
:erlang.system_time(:micro_seconds) &&& 281474976710655
end
else
def gen_trans_prefix do
{gs, s, ms} = :erlang.now
(gs * 1000000000000 + s * 1000000 + ms) &&& 281474976710655
end
end
end
Es macht den Job, aber ich fühle mich nicht es der beste Weg ist.
Irgendwelche Vorschläge?
Vielen Dank für Ihren Beitrag, ich mag die Art, wie Sie es behandelt haben. Ich erstelle einen Repo [jerp/now] (https://github.com/jerp/now), wo ich das, was ich getan habe, am Ende ablege. Es ist nah an Ihrer Antwort – jerome
Auch in einer anderen Sache, ich freue mich, über Erlang-Jose zu erfahren. Ich unterschreibe Nachrichten unter Verwendung eines Ports auf OpenSSL, ich werde Ihr Projekt in naher Zukunft betrachten. – jerome