「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」。
以太坊中Solidity行 · 大金刚境:语法详解#变量的数据位置和枚举
本文收录于我的专栏:细讲区块链
众所周知,以太坊开发拥有四种境界:金刚境,指玄境,天象境以及陆地神仙。今天我们继续来学习Solidity的语法来深造大金刚境界。
一、变量的数据位置
在solidity中,变量的位置主要分为两类。第一类是memory,是将变量存储在内存之中。还有一类是storage,这个类型修饰的数据会被永久的存储在区块链之上。其实还有一类是calldata,该位置上的数据是只读的,并不会在区块链上持久化,一般在外部函数才会指定。
需要注意的是,状态变量如果不指定,默认是存储在storage中。而在函数之中的局部变量同样是在storage。不过函数参数以及返回值它们的默认存储位置是存储在内存之中,即memory。
下面我们来介绍数据位置之间是如何进行转换的~
先来看一看memory的数据是如何修改后还是memory的
contract data1{
uint[5] array = [1,2,3,4,5];
function memoryTomemory() public returns(uint[5] memory){
uint[5] memory s = array;
fun1(s);
return s;
}
function fun1(uint[5] memory y) public{
y[0] = 200;
}
}
这样是引用传递,会改变源数据的值。
如果memory到storage是不会改变源数据的,具体例子在此不再详述。
然后再从storage到storage和memory到memory一样也是会更改源数据的。
而storage更改为memory为数据拷贝,是并不会改变源数据的值的。
二、枚举
枚举主要用于什么方面呢?比如我们在执行某个请求时,通常状态不止两种,例如http的状态码比如404、403、200等,这时候就需要枚举。
枚举可以显式的与整型进行转换,这个转换会在运行时检测数值范围,如果范围不匹配就会触发异常。需要注意枚举至少需要一个成员。