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
相关产品推荐
相关产品推荐

