Class.class 和 Struct.class 的联合类型数组

Array of Union-type of Class.class and Struct.class

我正在尝试获取 类 其他 类 和结构的列表。 我目前有以下代码(减少到最少)

struct Foo
end

class Bar
end

alias Baz = Foo.class | Bar.class

types = [
  Foo, Bar, Foo, Foo, Bar, Baz
] of Baz

这给了我以下错误:

Error in ./test.cr:9: instantiating 'Array(Bar:Class | Foo:Class):Class#build(Int32)'

types = [
        ^

in ./test.cr:9: instantiating 'Array(Bar:Class | Foo:Class):Class#build(Int32)'

types = [
        ^

in ./test.cr:9: no overload matches 'Pointer(Bar:Class | Foo:Class)#[]=' with types Int32, (Bar:Class | Foo:Class):Class
Overloads are:
 - Pointer(T)#[]=(offset, value : T)

types = [
        ^

我需要它来对运行时生成的未知类型的值执行类型检查。数组中的类型在编译时是已知的。我需要比较它们的类型不是。小例子(伪代码)

types = [TString, TFunc] # struct, class
arg_0 = arguments[i]
arg_type = types[i]
if arg_0.is_a? arg_type
  # passed
else
  # failed
end

此代码正在宏中生成。这可能吗?我错过了什么吗?

提前致谢

你将 Baz 放在数组中,它既不是 Foo 也不是 Bar,它是联合类型 class。如果你从数组中删除 Baz 那么它工作正常。