关于数据类型中值类型、引用类型、location问题的简化版
如果你不关心数据类型中值类型、引用类型、location问题的分析过程,可以记住以下几条规,也够简单。但在说出这个规则之前我们先要对问题做一个转化:值类型和引用类型区别的全部意义,就在于赋值操作时发生的是值拷贝还是引用拷贝。所以我们只需要考察变量赋值操作就可以了
一个赋值操作:
x = a
其中x是被赋值的变量,在赋值操作符的左侧,a是赋值变量,在赋值操作符的右侧。我们的规则是:
如果x是成员变量,值拷贝,否则:
如果x与y的location相同,引用拷贝,否则:
如果x的location是calldata,出错;如果x的location不是calldata,值拷贝。
这是完整的逻辑,没有遗漏的情况。整理出这个规则的关键在于问题的还原,还原为赋值操作的问题。有时一个问题看上去复杂,是因为我们的叙述方式干扰了我们自己。