solidity中使用mapping+struct的复杂数据结构时,遇到的问题”Mappings cannot be assigned to“。
更多区块链技术与应用分类:
出错的代码
代码
constructor() public{
dataBases[TypeConvertUtil.stringToBytes32(TABLE_BAG_NAME)] = bagRecordOf;
dataBases[TypeConvertUtil.stringToBytes32(TABLE_LOCATIONS_NAME)] = locationRecordOf;
dataBases[TypeConvertUtil.stringToBytes32(TABLE_ATTENDLOCATION_NAME)] = attendLocationRecordOf;
}
这样写会出现以下报错:
browser/TableDefTools.sol:112:9: TypeError: Mappings cannot be assigned to.
dataBases[TypeConvertUtil.stringToBytes32(TABLE_BAG_NAME)] = bagRecordOf;
^----------------------------------------------------------------------^
正确的代码
定义结构:
struct RecordBean {
// 表名称
string tableName;
// 主键值
string primaryKey;
// 内容值
string[] values;
}
mapping(bytes32 => mapping(bytes32 => RecordBean)) dataBases;
赋值:
dataBases[TypeConvertUtil.stringToBytes32(_tableName)][TypeConvertUtil.stringToBytes32(_primaryKey)] = recordBean;
取值:
RecordBean recordBean = dataBases[TypeConvertUtil.stringToBytes32(_tableName)][TypeConvertUtil.stringToBytes32(_primaryKey)];