水晶检查是否类列表的子类



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

我以为我只会使用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

知道我在这里做错了什么吗?

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

您可以按类型进行救援:

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

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

相关内容

  • 没有找到相关文章

最新更新