Crystal 检查 类 列表的子类
Crystal check if subclass of list of classes
所以我想做的是在运行时检查引发的错误是否是特定异常列表的子class。用户可以在运行时提交异常数组。
我想我只需要使用 is_a?
并且它可以按预期对付单个 class。
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
。
知道我做错了什么吗?
显然,对于当前编译器实现的问题中提到的确切情况,这是不可能的:
https://github.com/crystal-lang/crystal/issues/2060#issuecomment-309711343
so what I want to do is check if a raised error is a subclass of a list of specific Exceptions.
您可以按类型救援:
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
所以我想做的是在运行时检查引发的错误是否是特定异常列表的子class。用户可以在运行时提交异常数组。
我想我只需要使用 is_a?
并且它可以按预期对付单个 class。
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
。
知道我做错了什么吗?
显然,对于当前编译器实现的问题中提到的确切情况,这是不可能的: https://github.com/crystal-lang/crystal/issues/2060#issuecomment-309711343
so what I want to do is check if a raised error is a subclass of a list of specific Exceptions.
您可以按类型救援:
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