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

Rust函数参数不匹配报错:期望2个参数仅传1个如何修复?

错误修复方案

错误原因

find_key是实例方法(定义时第一个参数为&self),你用Self::find_key(key)调用时仅传入了key这1个参数,但实例方法要求第一个参数必须是self(实例的引用),因此编译器提示参数数量不匹配。

修复步骤

  • 修正find_key的调用方式:将Self::find_key(key)改为self.find_key(key),实例方法需通过当前实例的self引用调用。
  • 调整put方法的引用权限:put需要修改哈希表中的值,因此方法参数&self要改为&mut self。
  • 移除find_key中不必要的可变引用:find_key仅做查找操作,无需修改数据,将let bucket = &mut self.m_data[hash_key];改为let bucket = &self.m_data[hash_key];。

修正后的完整代码

struct MyHashMap {
    m_data: Vec<Vec<(i32, i32)>>,
    m_size: usize
}

impl MyHashMap {

    fn new() -> Self {
        let n: usize = 1000;
        MyHashMap{
            m_data: vec![vec![]; n],
            m_size: n
        }
    }

    fn hash(n: i32) -> usize {
        n as usize % 1000
    }

    fn find_key(&self, key: i32) -> Option<(usize, usize)> {
        let hash_key = Self::hash(key);
        let bucket = &self.m_data[hash_key]; // 移除不必要的可变引用
        for i in 0..bucket.len() {
            if bucket[i].0 == key {
                return Some((hash_key, i));
            }
        }
        None
    }
    
    fn put(&mut self, key: i32, value: i32) { // 修改为&mut self以支持数据修改
        if let Some((i, j)) = self.find_key(key) { // 使用self调用实例方法
            self.m_data[i][j].1 = value;
        } 
    }
    // some code
}

内容的提问来源于stack exchange,提问作者mascai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:23:29