在使用serde_json读取json文档时,我编写了以下代码行来获取解包返回值的结果serde_json::from_str:
fn get_json_content(content_s: &str) -> Option<Value> {
    let ms: String = serde_json::from_str(content_s).unwrap; // <--
    match serde_json::from_str(content_s) {
        Ok(some_value) => Some(some_value),
        Err(_) => None
    }
}
如您所见,我忘记了()调用结束时unwrap,导致以下错误:
错误:尝试
unwrap在类型上获取方法的值core::result::Result<_, serde_json::error::Error>Run Code Online (Sandbox Code Playgroud)let ms: String = serde_json::from_str(content_s).unwrap;
但是当我进一步看到这一点时,让我感到奇怪的是:
core::result::Result<_, serde_json::error::Error>
我理解匹配上下文中的下划线意味着什么,但实例化泛型?那么这是什么意思?我在Rust书籍,参考书或网络搜索中找不到任何答案.
我可以实现一个采用如下类型的宏:
trait Boundable<A> {
    fn max_value() -> A;
}
impl Boundable<u8> for u8 {
    fn max_value() -> u8 { u8::MAX }
}
当我将 转为impl宏时,为什么需要用尖括号将类型本身括起来,如下所示?
macro_rules! impl_boundable {
    ($a:ty) => {
        impl Boundable<$a> for $a {
            fn max_value() -> $a { <$a>::MAX }
        }
    };
}
impl_boundable!(i8);
尤其,<$a>::MAX。没有它,编译器会给我错误missing angle brackets in associated item path。我很困惑为什么宏代码需要与非宏代码不同。