问题标签 [sorbet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 如何为 ActiveModel 类生成 .RBI 文件
我有一个 PORO 用作值对象。我正在通过include ActiveModel::Model
为我带来的所有细节添加 ActiveModel。问题是我无法弄清楚如何为它生成 RBI 文件以便它通过srb tc
我目前正在使用sorbet-rails
并且因为这是一个 PORO 并且不继承自ActiveRecord
,bundle exec rails_rbi:all
或者bundle exec rails_rbi:models
即使我将它放在模型目录中(它不应该存在)也不会为此生成 .rbi 文件。
我可以手动编写 .rbi 文件,但我真的不想这样做。有没有办法可以自动生成它们?
这是我需要 RBI 文件的模块的简化示例
sorbet - LoadError 在现有的 Rails 项目中运行`bundle exec srb init`
我无法bundle exec srb init
在现有的 Rails 项目中运行。我看到的第一个错误是宝石的 LoadErrors,事情从那里开始走下坡路。
这是一个更大的项目,已经存在了几年。我相信它从 Rails 4.2 开始,并已升级到 6。我已经能够让 sorbet 启动并运行更小、更年轻的项目,但我不确定从哪里开始寻找这个问题。
终端输出:
sorbet - 如何在 Sorbet 中键入实例变量缓存?
我有看起来像这样的代码(游乐场链接):
这无法进行类型检查,说:
我已经尝试了一些方法来解决这个问题……</p>
- 当我将类型声明为
T.nilable(Integer)
时,Sorbet 说返回类型与 sig 不匹配。公平的。 - 当我将类型声明
initialize
为时@expensive = nil
,Sorbet 说不使用下面的定义nil
进行类型检查。Integer
也很公平。 - 如果我在 中声明
@expensive = []
,initialize
我的分配将||=
变得无法访问。 - 我当然可以说
@expensive = compute_expensive if @expensive.empty?
然后返回@expensive
,但我更感兴趣的是 Sorbet 的类型系统如何适应这种||=
模式。
对我来说,这感觉像是 Ruby 中非常常见的模式!我怎样才能让 Sorbet 为我进行类型检查?
sorbet - 测试设置中声明的变量必须是可空的?
我正在编写一个测试,其中有一个需要在setup do
.
当我运行类型检查时,我收到一条消息:
有没有办法像处理中的 ivar 声明setup do
一样处理 ivar 声明#initialize
?
sorbet - 在 Rails 初始化程序中使用创建自动加载类的实例时,Sorbet 失败
在使用 sorbet 的 rails 应用程序中,当您有一个需要类型实例的方法时,比如说Foo
. 并且您需要Foo
在请求之间持续存在于内存中的应用程序的初始化程序中初始化一个实例。Foo
然后您对源代码或使用的任何文件进行任何更改Foo
。然后 sorbet 认为该实例不再是 的实例Foo
,您需要重新启动您的应用程序才能使其停止出错。
这似乎是一种罕见的情况,但在我们的应用程序中,我们使用了一些依赖注入,而且这是一个庞大的团队。因此,几乎每次我们进行 git 更新时,sorbet 都会让我们重新启动我们的应用程序,并且在我们编写代码的一天中很多次。我们有一个大型应用程序需要一段时间才能重新启动,不得不这样做非常令人沮丧。
有想法该怎么解决这个吗?如果有帮助,我可以制作一个示例 rails 应用程序来演示此行为。
sorbet - 5032 错误代码在冰糕错误参考中不存在
此错误参考 - 网站上不存在 IncludesNonModule 的 5032
ruby - 访问单例对象类时出错 (https://srb.help/3001)
当我使用以下代码访问对象的单例类时
该srb
命令引发错误:
由于特殊情况(代理/模拟对象),我无法在对象上调用任何方法。尤其是对象对被问到 、 或 时非常不热情singleton_class
,所以instance eval
我需要使用这个表达方式。instance_exec
binding
我怎样才能抑制这个错误?将表达式包裹起来T.unsafe
并没有帮助。
ruby-on-rails - 如何使用 const_get 和动态父类提示 Sorbet?
如何允许动态定义类的父类并通过 Sorbet 类型检查?
例如:
这是 Rails gem 的一部分,需要配置模型的基类,类似于Devise 配置父控制器类。
运行时,srb tc
返回错误:Superclasses must only contain constant literals https://srb.help/4002
或者,我尝试过暗示:
...这会导致类型检查错误,如Method some_method does not exist on T.class_of(B) https://srb.help/7003
, 并srb rbi hidden-definitions
引发此错误: