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

时间:2017-06-20 07:36:43

标签: crystal-lang

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

我认为我只是使用is_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

但是,如果我然后使用一系列例外进行检查,它就不再起作用了

monitored = [A, C]
begin
  raise B.new
rescue e
  monitored.each do |exception_class|
    puts e.is_a? exception_class
  end
end

我得到的错误是Syntax error in eval:24: expecting token 'CONST', not 'exception_class',第24行是puts e.is_a? exception_class

循环中的

puts typeof(exception_class)按预期打印Exception:Class

我在这里做错了什么想法?

2 个答案:

答案 0 :(得分:1)

  

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

您可以按类型进行营救:

# => A or C

打印

{{1}}

答案 1 :(得分:0)

显然,对于当前编译器实现的问题中提到的确切情况,这是不可能的: https://github.com/crystal-lang/crystal/issues/2060#issuecomment-309711343