useの使い方がすんなり頭に入ってきます。レガシー!と言われるPerlなのに新しい言語で同じような記法を見つけるとなんだか嬉しいやら感慨深いやら不思議な気持ちになりました。 話はこれだけなのですが、小ネタすぎるのでuseに絡めて、import/exportネタでも。 (以下完全にElixirネタ) importディレクティブ Elixirにはimportディレクティブというのがありまして、指定モジュールのpublic関数にアクセスできるようになります。 importは名前どおり、Perl定番のExporterとは真逆のものです。 Exporterはライブラリ側が何をexportするのかを指定していましたが、importはライブラリを読み込む側が使うものになります。
Ecto はデータベースを扱うとても便利なライブラリです。 ただ、自分達が使う上でいくつか使い勝手の悪い部分があったので、Yacto というライブラリを作りました。1 Yacto とは Yacto は、Ecto で使いにくかった部分をサポートするためのライブラリです。 大まかに以下の機能があります。 マイグレーションファイルの自動生成 別アプリケーションからのマイグレーションの利用 水平分割したデータベースへのマイグレーション 複数データベースを跨るトランザクション(XA トランザクション) それぞれ説明していきます。 マイグレーションファイルの自動生成 Yacto は、特にマイグレーション周りが Ecto と異なります。 Ecto はスキーマとマイグレーションを別で定義していましたが、Yacto は スキーマからマイグレーションファイルを自動的に出力します。 具体的には、以下の様にスキー
defmodule SupRestartLimit.Worker do use GenServer require Logger @counter_limit 5 def start_link(interval) do GenServer.start_link(__MODULE__, [interval]) end @impl GenServer def init([interval]) do state = %{counter: 0, interval: interval} Process.send_after(self(), :countup, interval) {:ok, state} end @impl GenServer def handle_info(:countup, %{counter: counter, interval: interval}=state) do Log
意外と複雑だったので、可能な限り情報を纏めてみました。 例外の種類 Elixir の例外には throw と error と exit という3種類があります。 どの例外も、投げた直後に処理を抜けて catch や rescue に飛ぶ(あるいはそれが無ければプロセスが終了する)という点では同じです。 throw throw はフロー制御のための例外です。 Elixir は、関数の途中で return したり、ループで条件を満たしたら break するというのが出来ません。 そういう時、処理の流れ(フロー)を変えるために throw を利用します。 throw を使うことで、例えば Enum.find/2 のような関数は以下のように書けます。 def find(enumerable, default \\ nil, fun) do try do for v <- enumerable do
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く