2017-05-02 5 views
1

Gibt es eine Möglichkeit, Typen in einem Union-Typ in einem Makro zu durchlaufen? Hier ist mein Versuch:Iterationstypen in einem Makro

alias MyType = Int32 | String 

{% for type in MyType.union_types %} #=> undefined method 'union_types' for TypeNode of type MyType (must be a union type) 
    ... 
{% end %} 

Ich versuchte TypeNode#union_types Methode zu verwenden, aber scheint wie MyType nicht als Union-Typ betrachtet überhaupt:

{% puts MyType.union? %} #=> false 

Antwort

1

Es sieht aus wie es derzeit unmöglich ist, komplexe Alias-Typen in Makros zu verwenden. Dies ist ein Fehler, bitte stoßen Sie crystal-lang/crystal#4301 mit Ihrem Beispiel.

0

vielleicht typeof Methode hilft Ihnen

alias MyType = Int32 | String 

puts typeof(MyType) # => (Int32 | String):Class 

try here

+0

Danke für die Antwort. Die Idee ist, eine Liste von Typen zur Kompilierzeit zu bekommen. 'typeof' ist zu diesem Zeitpunkt nicht verfügbar [Beispiel] (https://play.crystal-lang.org/#/r/1yvm) –