如何使用Sorbet为块编写类型签名?

时间:2019-08-11 21:39:09

标签: ruby sorbet

我目前正在尝试将类型添加到一些核心的Rails方法中,其中之一是respond_to。它可以与块一起使用,如下所示:

respond_to do |format|
  format.html
  format.json { render json: @companies }
end

我遇到的问题是如何准确键入此字符,因为the docs on T.proc很小。 format参数是ActionController::MimeResponds::Collector的实例。不需要该块返回任何内容(例如,它不像Array#select那样计算该块,而该块返回一个布尔值)。

我认为这是您要编写签名的方式吗?:

sig do
  params(
    mimes: T.nilable(Symbol),
    block: T.proc.params(arg0: ActionController::MimeResponds::Collector).void
  ).void
end
def respond_to(*mimes, &block); end

(我们现在可以忽略*mimes参数,这并不重要)

这似乎可行,但我只想确保我了解应该使用T.proc的方式。

(请注意,这里有an issue with blocks that are nilable causing a regression to T.untyped,但这不是我目前感到困惑的地方)

1 个答案:

答案 0 :(得分:1)

似乎对我来说正确使用了签名。

顺便说一句,超级欢迎添加文档!

相关问题