匿名转发区块的 Sorbet sig

问题描述 投票:0回答:1

Ruby 3.1 添加了匿名块转发,所以你可以这样做:

def do_something(&)
  stuff.each(&)
end

Rubocop 添加了一个鼓励这种风格的默认规则,所以我开始考虑实现它,但我不知道是否可以为匿名块指定一个 sig。如果 Sorbet 不支持这一点,那么如果在文档中明确提及这一点或将其标记为类型检查器不支持,那就太好了。我从here看到隐式

yield
块无法输入,但没有提到未命名的显式块。

这里有一个 Sorbet.run 链接,其中一些尝试不起作用:

sig { params(:& => T.proc) }
sig { params("&": T.proc) }
似乎不起作用,“格式错误。未为参数 & 指定类型”和“未知参数名称 &” ” 错误,此外还有“为块参数找到 NilClass”错误。

sorbet
1个回答
0
投票

正如您所注意到的,Sorbet 的 sig 语法依赖于引用显式块参数的名称,而根据定义,匿名块参数没有该名称。

目前这是不可能的,也不能有隐式块(只能用

yield
调用)。我已经打开了一个 github 问题来请求此功能:

https://github.com/sorbet/sorbet/issues/6832

© www.soinside.com 2019 - 2024. All rights reserved.