我正在尝试获取其他类和结构的类列表 . 我目前有以下代码(减少到最低限度)
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
此代码是在宏中生成的 . 这可能吗?我错过了什么吗?
提前致谢
1 回答
你把Baz放在数组中,它既不是Foo也不是Bar,它是一个联合类型类 . 如果从阵列中删除Baz,那么它可以正常工作 .