如何在Cadence中比较同一struct的两个实例?
在Cadence中比较Struct实例的字段相等性
Cadence确实不支持直接使用==或!=运算符比较struct实例,要判断两个同类型struct的所有字段值是否完全相同,必须手动实现字段级的相等判断,最常用的方式就是为struct编写自定义的equals方法。
1. 基础实现示例
假设我们有一个User struct,只需为其添加一个接收同类型参数的equals方法,在方法内逐一比较所有字段:
pub struct User { pub let name: String pub let age: Int init(name: String, age: Int) { self.name = name self.age = age } pub fun equals(other: User): Bool { // 逐一比较所有字段 return self.name == other.name && self.age == other.age } }
使用时直接调用方法即可:
let userA = User(name: "Bob", age: 30) let userB = User(name: "Bob", age: 30) let isSame = userA.equals(other: userB) // 返回 true
2. 嵌套Struct的处理
如果struct包含其他自定义struct字段,需要递归调用对应struct的equals方法,确保深度比较所有嵌套字段:
pub struct Address { pub let street: String pub let city: String init(street: String, city: String) { self.street = street self.city = city } pub fun equals(other: Address): Bool { return self.street == other.street && self.city == other.city } } pub struct User { pub let name: String pub let age: Int pub let address: Address init(name: String, age: Int, address: Address) { self.name = name self.age = age self.address = address } pub fun equals(other: User): Bool { return self.name == other.name && self.age == other.age && self.address.equals(other: other.address) } }
3. 关键注意事项
- 确保覆盖所有需要比较的字段,避免遗漏导致判断不准确
- 内置类型(String、Int、Bool等)可直接用
==比较,Cadence原生支持这些类型的相等运算 - 若struct包含数组、字典等集合类型,需根据需求选择浅比较(仅比较引用)或深比较(遍历元素逐一判断)
内容的提问来源于stack exchange,提问作者alilloig
相关产品推荐
相关产品推荐

