首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果代码已被Sorbet静态检查,无效的签名错误会在运行时触发吗?

如果代码已被Sorbet静态检查,无效的签名错误会在运行时触发吗?
EN

Stack Overflow用户
提问于 2022-01-20 18:00:35
回答 1查看 95关注 0票数 1

我正在查看Sorbet运行时错误从医生那里的列表。在我看来,“来自无效sig procs的错误”和“来自无效sigs的错误”将被Sorbet类型检查器捕获。如果您的代码通过了Sorbet的静态检查,是否保证这些运行时错误永远不会发生?

EN

回答 1

Stack Overflow用户

发布于 2022-01-28 20:57:31

基本答案

在有些情况下,静态检查会通过,但是您会得到一个运行时错误。请考虑以下几点:

代码语言:javascript
复制
# typed: strict

class A
  extend T::Sig
  sig {returns(Integer)}
  def foo; 0; end
end

class B < A
  sig {returns(String)}
  def foo; '0'; end
end

B.new.foo

运行此程序将以以下方式结束:

代码语言:javascript
复制
RuntimeError: Incompatible return type in signature for override of method `foo`

额外的

通过确保在适当的时候在签名中使用overridable(:final) (文档),可以避免陷入这种情况。

代码语言:javascript
复制
class A
  extend T::Sig
  sig {overridable.returns(Integer)}
  def foo; 0; end

  sig (:final) {returns(Integer)}
  def bar; 0; end
end

class B < A
  sig {returns(String)} # this will fail static check, as it doesn't declare `override`
  def foo; '0'; end

  sig {returns(String)} # this will fail static check, as `bar` is `final`
  def bar; '0'; end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70791202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档