shinjuku.ex#7

久しぶりに開催されたshinjuku.exに参加。今年に入ってからelixir界隈はにぎわってきていて、
Programming Elixir
のような書籍が現れてきた。他にもオライリーからも出版されてきている。

そんな背景と関係あるのか無いのか、今回はKDDIウェブコミュニケーションズが会場であった。

SigilかわいいよSigil

Sigilとはリテラルの拡張にあたるもので、言語組み込みとしては正規表現の%rやバイナリの%bが存在している。elixirではユーザ定義のSigilを使うことができるので今回はそのネタ。

Sigilの定義の仕方

言語で予約されているSigilは以下のとおり

b バイナリ文字列(エスケープあり, ””と同様)
B バイナリ文字列(エスケープなし)
c 文字リスト(エスケープあり, ''と同様)
C 文字リスト(エスケープなし)
r 正規表現(エスケープあり)
R 正規表現(エスケープなし)
w ワードリスト(エスケープあり)
W ワードリスト(エスケープなし)

コレ以外で文字を選択するのが吉であり、ここではlとする。大文字を小文字にするSigilである。
モジュール中にsigil_lという関数を定義する。こんな感じ。

defmodule Sigill do
  def sigil_l(a, _opt) do
    String.downcase(a)
  end
end

このSigilを使う側は、モジュールSigillをimportする必要がある。

iex(1)> import Sigill; IO.puts(%l(ABC))
abc
:ok

Elixir中に他の言語を埋め込むための構文として使えそうだ。