Skip to content

Latest commit

 

History

History
48 lines (37 loc) · 1.63 KB

README.md

File metadata and controls

48 lines (37 loc) · 1.63 KB

Vyper 入门: 7. 映射类型

在Vyper中,映射(Mapping)是一种将键映射到值的数据结构,用于存储键值对的集合,通过 HashMap 关键字定义

映射特点

  • 键不会直接存储在映射中,而是通过其哈希值访问。
  • 映射的值默认初始化为相应类型的默认值。
  • 映射无法遍历,也没有提供长度属性。

映射声明

映射声明需要指定键和值的类型,例如 HashMap[_KeyType, _ValueType], 其中 _KeyType 可以是Vyper中的任何基本类型或字节类型,但是不支持映射、数组或结构作为键类型。_ValueType 则可以是任何类型,包括映射和结构。

映射是状态变量,只在函数外部声明,无法在函数内部声明映射类型。

示例代码

example_mapping: public(HashMap[uint256, uint256])

# 映射赋值
@external
def set_mapping():
	self.example_mapping[0] = 100

	# 无法在函数内部声明一个映射,这样会出错
	# example_mapping: HashMap[uint256, uint256]

映射使用

  • 读取: 通过提供键来访问映射中的值
number: uint256 = self.example_mapping[0]
# number == 100
  • 更新: 为给定的键分配新值
self.example_mapping[0] = 99
# number == 99
  • 删除:将键的值重置为默认值
self.example_mapping[0] = empty(uint256)
# number == 0

总结

映射在智能合约中非常有用,尤其是在需要有效地跟踪和更新状态的场景中。正确使用映射对于开发高效和安全的智能合约至关重要。比如存储资产所有权和代币余额,映射的作用往往比数组更加高效。