重新分配变量时动态类型未清除 这是一个错误吗?
php小编小新在这里为大家解答一个常见的问题:“重新分配变量时动态类型未清除 - 这是一个错误吗?”在PHP中,变量的动态类型是其灵活性的一个重要特点。当我们重新给一个变量赋予不同类型的值时,PHP会自动根据新的值来调整变量的类型。然而,有时候我们可能会因为忘记清除变量而导致意外的结果。那么,这种情况算不算是一个错误呢?让我们一起来探讨一下。
问题内容
Go 中有一个众所周知的怪癖,即持有 nil 值的接口不等于 nil。这是因为在底层,接口是动态类型和值的组合,只有当两者都为 nil 时,它才为 nil。所以 (*MyStruct)(nil) != nil
但 (nil)(nil) == nil
。本博客对此进行了更好的解释。
我发现了一些与此行为相关的东西,这让我感到惊讶,在这里:https://goplay.tools/snippet/VF8oWt9XvO8。代码也复制如下。
看来,如果您重新分配分配了动态类型的变量,动态类型就会被记住并保留为新值。这对我来说似乎是出乎意料的,我认为重新分配变量应该覆盖所有过去的状态。
我检查了语言规范,但它有点含糊:https://go.dev/ref/spec#Assignability
Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block ... Redeclaration does not introduce a new variable; it just assigns a new value to the original.
登录后复制