Tho*_*ang 5 mapping blockchain ethereum solidity smartcontracts
我只看到映射变量被声明为存储变量。我想知道是否可以在 Solidity 的函数内部声明一个映射变量。
不,这是不可能的,因为映射不能动态创建,您必须从状态变量分配它们。然而,您可以创建对映射的引用,并为其分配存储变量。
然而,您可以将映射封装在一个合约中,并通过实例化包含该映射的新合约来在另一个合约中使用它,这是在函数内“声明”映射的最近似方法。
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract MappingExample {
mapping(address => uint) public balances;
function update(uint newBalance) public {
balances[msg.sender] = newBalance;
}
}
contract MappingUser {
function f() public returns (uint) {
MappingExample m = new MappingExample();
m.update(100);
return m.balances(address(this));
}
}
Run Code Online (Sandbox Code Playgroud)
取自文档: