昨天看完value types,今天来聊聊 reference types。
solidity 的 reference types 有三个东西很特别我们需要先特别来认识一下
memory
预设 fuction 传入跟 return 它们都是预设放在 memory
storage
预设的区域变数跟全域变数都是放在 storage
calldata
效果跟 memory 很接近,但是只有 read only。大部分是应用在参数传入使用
用下面例子两个程序例子
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract hellotest
{
//这种就叫做 storage
int[] public numbers;
function Numbers() public
{
numbers.push(1);
numbers.push(2);
// 其实不用特意指定,它也是会storage
int[] storage myArray = numbers;
// 实质上会影响到 number
myArray[0] = 0;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract hellotest
{
int[] public numbers;
function Numbers() public
{
numbers.push(1);
numbers.push(2);
//这种就是储存在memory
int[] memory myArray = numbers;
//这个异动到的值其实没有,影响到原本的number
myArray[0] = 0;
}
}
上面介绍完,有别於一般於三种储存状态,再来介绍一些比较常见的 references-type
很常见的宣告,基本上就常见的型别 T[N] 这种宣告方式就可以,下面有一些简单的范例
uint balance[10];
uint balance[3] = [1,2,3];
balance[2]=5;
uint size = 3;
uint balance[] = new uint[](size);
这个如果善於写 golang,应该都很熟悉,下面也来点简单的介绍
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract test {
struct Member {
string name;
string addr;
}
Member member;
function setMember() public {
member = Member('syhlion', 'Taiwan');
}
function getAddress() public view returns (string memory) {
return member.addr;
}
}
明天会来介绍 mapping types。
>>: Day 13:「谁还在背字典?」- Tailwind IntelliSense 插件
既然是从 INFORMIX 剥离出来的工具,应该连结资料库的能力是强大的。本段落我们检视一下Gene...
这是一部由 SEGA 出品的第六代主机、故以太阳系中对应的第六颗行星 Saturn 为名、以下就简称...
Delphi 不重覆的字串列 TStringList 试作 环境:Delphi RAD 10.4 动...
ISO 27001 机房管理部份之三 稽核分三种 : 内部稽核 (例如 : 稽核组长、稽核小组) 外...
今日题目 题目连结:653. Two Sum IV - Input is a BST 题目主题:Ha...