如何使用match语句判断Fungible/Non-Fungible资源类型
解决Flow区块链中判断Bucket资源类型的编译错误
问题场景
需要判断传入方法的bucket资源是Fungible(可 fungible)还是Non-Fungible(不可 fungible)资源,两种类型对应不同操作逻辑,尝试的代码如下:
let resource_man = bucket.resource_manager(); match resource_man.resource_type() { ResourceType::NonmFungible => {//do something here} ResourceType::Fungible => {//do another here} }
编译错误
执行代码时出现如下错误:
error[E0533]: expected unit struct, unit variant or constant, found struct variant 'ResourceType::NonFungible'
解决方案
1. 修正拼写错误(表层问题)
代码中把 NonFungible 误写为 NonmFungible,这是第一个需要修正的点,但核心错误是结构体变体的匹配方式问题。
2. 推荐:使用内置判断方法
Flow Cadence的ResourceManager提供了直接判断资源类型的便捷方法,无需手动匹配ResourceType变体:
let resource_man = bucket.resource_manager(); if resource_man.is_fungible() { // 处理可 fungible 资源的逻辑 } else if resource_man.is_non_fungible() { // 处理不可 fungible 资源的逻辑 }
3. 可选:正确使用match表达式匹配变体
如果坚持用match,需要注意ResourceType::NonFungible是带关联类型的结构体变体,必须在分支中处理其关联参数(用_忽略即可):
let resource_man = bucket.resource_manager(); match resource_man.resource_type() { ResourceType::Fungible => { // 可 fungible 资源逻辑 }, ResourceType::NonFungible(_) => { // 不可 fungible 资源逻辑 } }
内容的提问来源于stack exchange,提问作者Leo Magal
相关产品推荐
相关产品推荐

