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 的 sig 语法依赖于引用显式块参数的名称,而根据定义,匿名块参数没有该名称。
目前这是不可能的,也不能有隐式块(只能用
yield
调用)。我已经打开了一个 github 问题来请求此功能: