为什么在尝试匹配元组时出现类型不匹配错误?

马克斯·扬科夫(Max Yankov)

这是我希望可以使用的一些不言自明的代码:

type some_t = i32;

struct SomeStruct {
    pub some_tuple_vector: Vec<(some_t, some_t)>,
}

impl SomeStruct {
    fn some_method(&mut self) {
        for p in self.some_tuple_vector.iter_mut() {
            match p {
                (x, y) if x < 0 => self.some_tuple_vector.remove(p),
                (x, y) => p = (x, y - 1),
            }
        }
    }
}

fn main() {}

但是,我在试图匹配和破坏元组的两行上都出现错误:

error[E0308]: mismatched types
  --> src/main.rs:12:17
   |
12 |                 (x, y) if x < 0 => self.some_tuple_vector.remove(p),
   |                 ^^^^^^ expected mutable reference, found tuple
   |
   = note: expected type `&mut (i32, i32)`
              found type `(_, _)`

我不明白 类型&mut (i32,i32)本身不是元组吗?

我意识到我可以重写此代码以使其更优雅:

self.some_tuple_vector = self.some_tuple_vector
    .iter()
    .map(|(x, y)| (x - 1, y))
    .filter(|(x, y)| x > 0);

但是我得到了同样的错误:

error[E0308]: mismatched types
  --> src/main.rs:12:19
   |
12 |             .map(|(x, y)| (x - 1, y))
   |                   ^^^^^^ expected &(i32, i32), found tuple
   |
   = note: expected type `&(i32, i32)`
              found type `(_, _)`
AB

我不太明白。类型&mut (i32, i32)本身不是元组吗?

不,它是对元组的可变引用。

您也无法在向量上进行迭代时从向量中删除元素,因为这可能会导致指针悬空。remove也会删除index处的元素。您将必须做不同的事情:

type some_t = i32;

struct SomeStruct {
    pub some_tuple_vector: Vec<(some_t, some_t)>,
}

impl SomeStruct {
    fn some_method(&mut self) {
        self.some_tuple_vector.retain(|tuple| tuple.0 >= 0);
        for tuple in &mut self.some_tuple_vector {
            tuple.1 -= 1;
        }
    }
}

fn main() {}

这也可以一次完成loop,但这可能已经足够了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么尝试在Debian上安装Mono时出现哈希总和不匹配错误

为什么在这里出现类型不匹配错误?

为什么会出现“类型不匹配”错误?

当使用TryFuture而不是等效的Future时,为什么会出现关于类型不匹配的错误?

为什么在尝试将 boolean 类型的变量传递到 txtBox_Exit() 事件时会出现类型不匹配错误?

尝试访问字典中的排序列表时出现类型不匹配错误

尝试在 vba 中使用嵌套公式时出现“类型不匹配”错误

尝试在 Django 中保存模型表单时,为什么会出现“外键不匹配”?

尝试转发到 Kubernetes 时出现协议不匹配错误

为什么在返回“ impl Trait”的函数中出现“匹配臂具有不兼容的类型”错误?

为什么此 VBA 代码会出现类型不匹配错误?

为什么在 VBA 中运行以下公式时会出现“类型不匹配”错误?

元组的奇怪Scala'类型不匹配'错误

为什么我在Spark中出现类型不匹配?

为什么我在Scala Spark中出现类型不匹配?

使用协程时出现类型不匹配错误

索引&str时出现“错误:类型不匹配”

调用CWnd :: InvokeHelper时出现类型不匹配错误

创建VBA阵列时出现类型不匹配错误

关闭启动画面时出现类型不匹配错误

为什么在pd.Series上使用转换构造时出现错误:长度不匹配

为什么会出现输入不匹配错误(Java)

为什么没有类型不匹配错误?

类型不匹配错误VBA-为什么?

为什么在数据匹配时出现“插入值列表与列列表不匹配:1136 列计数与值计数不匹配”错误?

为什么返回类型不匹配时允许编译?

在VBscript中,尝试将数组列表中的每个项目拆分为单个数组时,出现类型不匹配错误

尝试检查单元格是否包含整数时出现运行时错误 13 类型不匹配

在Access中的SQL语句的搜索字符串末尾添加“ CF”时,为什么会出现“数据类型不匹配”错误?