【发布时间】:2022-03-29 03:07:00
【问题描述】:
Sorbet 推断true 的类型为TrueClass,false 的类型为FalseClass。如果它改为推断T::Boolean,通常会很好。为什么不将 true 和 false 的特殊情况改为 T::Boolean 类型?
可以使用类型注释解决此问题,例如使用T.let(true, T::Boolean) 初始化变量,但最好不必提供这些额外信息。
# typed: true
T.reveal_type(true) # Revealed type: `TrueClass`
T.reveal_type(false) # Revealed type: `FalseClass`
extend T::Sig
sig {params(x: T::Boolean).void}
def test(x)
var = true
10.times do
var = false # Changing the type of a variable in a loop is not permitted
end
end
在循环中将false 分配给var 会引发错误,因为var 的类型正在从TrueClass 更改为FalseClass。
【问题讨论】:
标签: sorbet