にむかひて

doctestでランダムな結果を扱うには?

Elixirのdoctestはメソッドの近くに出力例と合わせて書けて嬉しい!けど、出力がランダムになるようなのはどうすればいい?

  • Enum.random([1,2,3]) みたいな関数
    • // Enum.sample() とよく間違える…

結論

  • :rand.seed(:exsplus, {101, 102, 103}) 等として固定する
  • :exsplus は、アルゴリズムの指定のこと
  • {101, 102, 103} はそれぞれInteger指定で、各アルゴリズムで初期化に使用される(のでこの度指定する)
  • // Enum.random() のソースをみればいいのでは、ということで見てみた

参考させていただいた資料等

その他

ライブラリでは、ランダムな文字列(トークンなど)をどう作っているのか。phx.gen.auth をみてみる

iex> :crypto.strong_rand_bytes(1)
"m"
iex> "m" <> <<0>>
<<109, 0>>
iex> <<109>>
"m"

サイト内検索