Crystal lang Crystal检查类列表的子类是否

Crystal lang Crystal检查类列表的子类是否,crystal-lang,Crystal Lang,所以我想做的是检查引发的错误是否是运行时特定异常列表的子类。用户可以在运行时提交一系列异常 我想我应该只使用is\u a?,它在一个类上可以正常工作 class A < Exception; end class B < A; end class C < Exception; end class D < Exception; end begin raise B.new rescue e puts e.is_a? A end 我得到的错误是eval:24中的语法错

所以我想做的是检查引发的错误是否是运行时特定异常列表的子类。用户可以在运行时提交一系列异常

我想我应该只使用
is\u a?
,它在一个类上可以正常工作

class A < Exception; end
class B < A; end
class C < Exception; end
class D < Exception; end

begin
  raise B.new
rescue e
  puts e.is_a? A
end
我得到的错误是eval:24中的
语法错误:应该是标记“CONST”,而不是“exception\u class”
,第24行是
put e.is\u a?异常类

将typeof(exception\u class)
放入循环,按预期打印
exception:class


你知道我做错了什么吗

显然,对于问题中提到的当前编译器实现的确切情况,这是不可能的:

所以我要做的是检查引发的错误是否是特定异常列表的子类

您可以按类型进行救援:

哪张照片

# => A or C

嗯,是的,如果异常列表在编译时是已知的,那就行了,但是我希望用户能够在运行时提交一个异常数组并检查它,然后您可以使用类名或更好的唯一ID来识别异常类型。面向用户的配置应该与内部名称分离。
begin
  raise B.new
rescue e : A | C
  puts "A or C"
rescue B
  puts "B"
rescue
  puts "any other kind of exception"
end
# => A or C