1

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

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

我遇到的问题是如何准确输入,因为文档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应该使用的方式。

(请注意,可空的块存在导致回归的问题T.untyped,但这不是我目前所困惑的)

4

1 回答 1

1

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

顺便说一句,非常欢迎添加文档!

于 2019-08-12T16:55:24.060 回答