You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:32:32