lazy in Scala macro

めも

lazy は macro 展開前に部分的に desugar される。ここからいくらか実装を察することができる。

展開前

lazy val a = 10

展開後

{
  lazy <artifact> var a$lzy: Int = _;
  <stable> <accessor> lazy def a: Int = {
    a$lzy = 10;
    a$lzy
  };
  ()
}