我忘记指定参数的类型,错误消息如下:

error: expected one of `:` or `@`, found `)`
 --> src/main.rs:2:12
  |
2 | fn func(arg)
  |            ^ expected one of `:` or `@` here

这就引出了一个问题:你能用@符号做什么?我不记得读过关于用@符号做任何事的书.我也在谷歌上搜索了一下,什么也没找到.@是做什么的?

推荐答案

可以使用@符号将图案绑定到名称.作为Rust Reference demonstrates人:

let x = 1;

match x {
    e @ 1 ... 5 => println!("got a range element {}", e),
    _ => println!("anything"),
}

Rust allow pattern expressions(如果完成)和argument lists are no exception中的作业(job).在@的特定情况下,这不是很有用,因为您已经可以命名匹配的参数.然而,为了完整起见,以下是一个示例:

enum MyEnum {
    TheOnlyCase(u8),
}

fn my_fn(x @ MyEnum::TheOnlyCase(_): MyEnum) {}

Rust相关问答推荐

Rust kill std::processs::child

为什么类型需要在这个代码中手动指定,在rust?

当rust中不存在文件或目录时,std::FS::File::Create().unwire()会抛出错误

为什么BitVec缺少Serialize trait?

当T不执行Copy时,如何返回Arc Mutex T后面的值?

在IntoIter上调用.by_ref().Take().rev()时会发生什么情况

如何修复数组中NewType导致的运行时开销

写入引用会更新基础值,但引用会打印意外的值

处理带有panic 的 Err 时,匹配臂具有不兼容的类型

为什么 Rust 创建的 f32 小于 f32::MIN_POSITIVE?

为什么 Rust 需要可变引用的显式生命周期而不是常规引用?

在没有任何同步的情况下以非原子方式更新由宽松原子操作 Select 的值是否安全?

在描述棋盘时如何最好地使用特征与枚举

当锁被释放时,将锁包装到作用域中是否会发生变化?

‘&T as *const T as *mut T’ 在 ‘static mut’ 项目中合适吗?

在 Bevy 项目中为 TextureAtlas 精灵实施 NearestNeighbor 的正确方法是什么?

在异步 Rust 中,Future 如何确保它只调用最近的 Waker?

字符串切片的向量超出范围但原始字符串仍然存在,为什么判断器说有错误?

Rust 为什么 (u32, u32) 的枚举变体的大小小于 (u64)?

函数参数的 Rust 功能标志