Rust 的这种奇葩语法是什么意思?比如 const ID: &'static str = "1";

2018-12-07 12:23:07 +08:00
 zzgy

比如:

const REQ_ID: &'static str = "1";

fn some_strange_method(key: Option<&str>) -> Result<&'static str, ()> {
    match key {
        None | Some("la") => Ok("la"),
        Some("lele") => Ok("lele"),
        Some("hei") => Ok("hei"),
        val @ _ => Err(println_err!("Unsupported")),
    }
}
3279 次点击
所在节点    问与答
5 条回复
Kilerd
2018-12-07 12:33:11 +08:00
奇葩?
请观看 Rust Book。谢谢
P0P
2018-12-07 12:34:32 +08:00
请看 rust 关于生命周期的资料,’ static 说明这个变量生命周期和和运行程序一样长,在程序运行时一直存在
zzgy
2018-12-07 12:47:29 +08:00
第二段的最后一行的 @ 的是什么意思呢?
kefengong
2018-12-07 13:14:16 +08:00
@zzgy 加个 @ 那么前面 val 就可以代表这个分支的值, 这里的 val @ 有点多余, 后面没用到。表述不是很清楚还是翻翻教程吧
trait
2018-12-07 13:39:21 +08:00
const REQ_ID: &'static str = "1";
这 syntax 不能更流畅,明确标注限定和 type 信息

> val @ _ => Err(println_err!("Unsupported")),
将所有除了上述 cases 以外的值绑定到 val,当然这里写法不理想,直接 _ => Err(....) 即可
可能用到的情况比如 val @ _ => println!("{:?}", val);
cc https://doc.rust-lang.org/1.5.0/book/patterns.html#bindings

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/515324

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX