首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理“sorbet类型”和"gems“RBI文件之间的冲突

处理“sorbet类型”和"gems“RBI文件之间的冲突
EN

Stack Overflow用户
提问于 2020-01-06 17:00:05
回答 1查看 323关注 0票数 0

我已经在Rails代码库中安装了Sorbet,并且看到了以下错误的许多实例:

代码语言:javascript
复制
sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi:958:
Method ActiveRecord::ConnectionAdapters::TableDefinition#column redefined without matching argument count. Expected: 3, got: 5 https://srb.help/4010
     958 |  def column(
     959 |    name,
     960 |    type,
     961 |    index: nil,
     962 |    default: nil,
     963 |    **options
     964 |  ); end
    sorbet/rbi/gems/activerecord.rbi:5256: Previous definition
    5256 |  def column(name, type, **options); end

为了消除类型错误,我要么在其中一个文件中将typed: true更改为typed: false (这不包括一些不重叠的类型),要么手动删除/注释重叠方法(这既耗时又脆弱)。

我想知道是否有某种编程解决方案,在这种解决方案中,我可以说“在发生冲突的情况下,使用具有更高可用性的方法”,或者“始终选择最优类型的定义”。

同样,这是在Rails代码库中,但我认为这将存在于手工生成和自动生成的RBI之间的任何冲突中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-06 19:34:03

我编写了一些这样的方法,不幸的是,由于"Shapes“(Sorbet的可键入散列的实验性实现)不允许可选键,所以它们不能准确地表示这些方法。因此,许多方法--尤其是Rails中的复杂内容--在sorbet类型和sorbet的自动生成文件之间是不同的。

我刚刚使用srb rbi suggest-typed自动设置了回购中文件的类型,它只是将其标记为false。据我所知,即使文件被标记为false (尽管我可能会更多地查看该类型信息,以验证确实如此),但仍然使用来自sorbet类型化的类型信息。

不幸的是,目前我对这个问题没有更好的解决方案,但是,到目前为止,仅仅使用建议类型似乎就足够了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59616105

复制
相关文章

相似问题

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