scala.Matchable自体の解説はしませんが、AnyValやAnyやAnyRefや Product with Serializable
と同様に、それに推論されたら、わりとミスなことが多い気がするので、作ってみました。
Scala 3のmacroによる型安全かつ実行時にリフレクションにならないClose型クラス(ローンパターン)の実装
というのがおそらく作成できたけれど、もっと書き方改善可能なところあったら教えて下さい。 このくらいすでに、Scala 3でも前例が存在する気もするけど、とりあえず(あまり前例は調査はせずに)自作しました。
- テスト書いてあるとおり、指定されたcloseメソッドがなかったらコンパイル時にエラーです
- コンパイル時にはstructural typeのような感じですが、本物のメソッド呼び出しに、コンパイル時に置き換えてるはずなので、実行時に余計なコストはかからないはずです*1
ところでScala 3側のbugなのかsbt側のbugなのか、仕様なのかわからないけど、これ全部いっしょにコンパイルすると(typeCheckErrorsなど使うと?) 変なエラーが出るので、いい感じに分けてコンパイルするかなにか工夫をしないといけなかった、面倒・・・。
*1:もちろん型クラスのインスタンス生成コストくらいはあります。Scalaの普通のstructural typeみたいに、リフレクションにはならない、の意味。型クラス自体をさらにinlineは単純には無理だった https://twitter.com/xuwei_k/status/1398978228400754688
sbt 1.4以降でgraphviz使ったsvgなどのdependency graphの出力
- sbt 1.4から標準にdependency graphが取り込まれた
- 標準で(拡張子的にはhtmlだが)svgで出力するやつがある
- が、細かい部分が見にくい
.dot
フォーマットで吐き出して、それをgraphvizでsvg変換したほうが個人的には好み- よって、それの方法のメモ