petitviolet blog

    metaprogramming (3 posts)

    icon
    Written by petitviolet

    メタプログラミングScala

    2017-04-18QiitaScalametaprogramming
    社内勉強会の資料をちょっと改変したやつ。メタプロ&scala.metaの入門編。
    社内勉強会の資料をちょっと改変したやつ。 メタプロ & scala.meta の入門編。 メタプログラミングとは > プログラミング技法の一種で、ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックによってプログラミングを行う方法、またその高位ロジックを定義する方法のこと。 [メタプログラミング - wikipedia ](https://ja.wikipedia.org/wiki/メタプログラミング) つまり プログラムを引数としてプログラムを出力とする関数、みたいなもの。 リフレクションも一種のメタプログラミングで、文字列から

    scalametaに入門する

    2017-02-19QiitaScalametaprogrammingmeta
    scalametaはinlinemacroと呼ばれるmacroannotatio
    scalameta は inline macro と呼ばれる macro annotation のためのツールキット。 型安全に macro 出来る。 公式とチュートリアルは以下。 - [scala.meta](http://scalameta.org/) - [A Whirlwind Tour of scala.meta](http://scalameta.org/tutorial/Part4-Macroannotations) setup まずは使えるようにするために build.sbt に追記。 sbt libraryDependencies += "org.sc

    scalametaでの型パラメータとコンストラクタ

    2017-02-19QiitaScalametaprogrammingmeta
    tl;dr直接、annotationclassの型パラメータやコンストラクタには
    tl;dr 直接、annotation class の型パラメータやコンストラクタにはアクセス出来ない。 その代わりに、thisを用いてパターンマッチで取得することが出来る。 題材 mix-in injection とか minimal cake pattern と呼ばれる、DI 対象となる class を mix-in する macro annotation を実装した。 - Uses[MyService]とするとval myService: MyServiceがフィールドに追加される - MixIn[MyService](new MyServiceImpl)