在遵循 Twostraws 的教程时,我使用钳制方法创建了 Int 的扩展。但是,当我在 UInt64 上应用此扩展方法时,它仍然有效。有人可以解释为什么吗?原始教程在这里:协议扩展
extension Int{
func clamp(high: Int, low: Int)->Int{
if self > high {
return high
}
else if self < low{
return low
}
return self
}
}
let bigNum: UInt64 = 5
5.clamp(high: 10, low: 0)
你不是在这里调用
UInt64
,要做到这一点,你必须这样写:
bigNum.clamp(high: 10, low: 0)
这应该会产生编译器错误。
当调用
5.clamp(...)
时,你实际上实例化了 new Int
,因为没有任何上下文的 5
是一个 Integer Literal