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中に他の言語を埋め込むための構文として使えそうだ。