scalaの文字列いろいろありすぎて笑ったけど便利だった

こちら
のやきまわしです。

scalikejdbcのsql””” *** “””ってどうやって実現してるんだろう、と
調べたら色々でてきてびっくりしました。

1. 普通の文字列

2. s補完子

文字列リテラル内に変数を埋め込みたいときに利用する補完子

式を与えることもできる

3. f補完子

C言語のprintfのようなフォーマット文字列を定義するために利用する

$変数名%フォーマット の形式で書く。

4. raw補完子

s補完子の機能に、リテラル内でエスケープをしない機能を追加したもの。
raw string literalともいう。

ダブルクォート3つでも使える

こんな感じ

scalaに標準で用意されているのは以上3つの補完子。
ユーザが独自に定義することもでる(ここからが本編)

カスタム補完子

上記のような文字列に対する処理を自分が定義した補完子で
拡張することができる

手順はこちら

  1. StringContext(importなしで利用可能)を引数に受け取りAnyValを継承したimplicit classを定義する
  2. その中で補完子にしたいメソッドを定義する。返すのはもちろんStringやStringContext以外の型でもOK
  3. あとはメソッド名を補完子として利用できる

カスタム演算子で作成した文字列はコンストラクタのStringContextに格納され
変数を文字列内に入れると、それらはメソッドの引数であるargsに格納されます。

上記の例だと

が出力されます

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です