P.S. There are also many ways to solve your problem without reflection: for
example, “new Column()” could modify a var somewhere, adding itself to the
list of columns (yes, I’m that evil). Or you could combine them explicitly,
like in Slick:
val columns = column1 ~ column2
On Friday, May 23, 2014 3:51:41 PM UTC+1, Nick Stanchenko wrote:
>
> I think you’ll get help much faster if you ask this at the
> *scala-user*mailing list (tip: put the word “macro” in the topic to summon
> Eugene
> Burmako). Anyway, the code should be something like this:
>
> trait Table {
> def columns: List[Column] = macro TableMacros.columnsImpl
> }
>
> object TableMacros {
> import scala.reflect.macros.Context // on 2.11, see blackbox/whitebox in
> the docs
>
> def columnsImpl(c: scala.reflect.macros.Context): c.Expr[List[Column]] =
> {
> import c.universe._
>
> // 1.
> // use c.prefix to get the exact class
> // try doing println(showRaw(c.prefix)) to see the tree and where the
> class goes there
>
> // 2.
> // find the column declarations — should be similar to what you have
> now
>
> // 3.
> // return c.Expr[List[Column]](x), where x is your List[Tree], each
> Tree corresponds to a column identifier
> }
> }
>
> HTH,
> N
>
>
> On Friday, May 23, 2014 11:58:25 AM UTC+1, David Pérez wrote:
>>
>> Thanks Andrzej (it looks like a Poland name).
>> I'll take a look at it carefully later.
>> This is my exact use case:
>>
>> http://stackoverflow.com/questions/23752885/how-to-use-reflection-at-compile-time
>>
>> I'm creating a DSL for simplifying access to SQLite.
>> When finished, I'll share via github.
>>
>>
>> Am Freitag, 23. Mai 2014 12:28:11 UTC+2 schrieb Andrzej Giniewicz:
>>>
>>> It might be not exactly what you need, but we use macros on Android in
>>> SpecGine ( game engine my group works on -
>>> https://bitbucket.org/specdevs/specgine ). While it isn't maybe the
>>> best example, it works good enough for our use case, i.e. we heavily
>>> use macro
>>>
>>> def withManager[T <: ComponentsSpec]: T with ComponentsManager
>>>
>>> which inspects how T is constructed and mixes in manager instance to
>>> use it within our Entity system. It works quite well with macros in
>>> 2.10 (SpecGine 0.1) and we still use it with 2.11 after simple porting
>>> (current master branch), without macro paradise.
>>>
>>> What is the problem you are trying to solve? Because reflection can
>>> solve many problems, optimal solutions might be different.
>>>
>>> On Wed, May 21, 2014 at 12:28 PM, David Pérez
>>> <[email protected]> wrote:
>>> > Does anyone know if reflection at compile time through macros has this
>>> kind
>>> > of problems?
>>>
>>>
--
You received this message because you are subscribed to the Google Groups
"scala-on-android" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.