Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 当没有类型参数或属性时,我如何暗示值的类型?_Rust - Fatal编程技术网

Rust 当没有类型参数或属性时,我如何暗示值的类型?

Rust 当没有类型参数或属性时,我如何暗示值的类型?,rust,Rust,我试图将我的结构转换为HashMap,但在impl块中时无法这样做。由于机箱的原因,我只能使用&self作为解析功能的参数 use std::collections::HashMap; pub enum Value { Int(i64), Object(HashMap<String, Value>), } pub struct WeatherSettings { forecast_days: i64, } impl WeatherSettings {

我试图将我的结构转换为
HashMap
,但在impl块中时无法这样做。由于机箱的原因,我只能使用
&self
作为
解析
功能的参数

use std::collections::HashMap;

pub enum Value {
    Int(i64),
    Object(HashMap<String, Value>),
}

pub struct WeatherSettings {
    forecast_days: i64,
}

impl WeatherSettings {
    fn resolve(&self) -> Value {
        let json_object: HashMap<String, Value> = *self.into();
        Value::Object(json_object)
    }
}

impl From<WeatherSettings> for HashMap<String, Value> {
    fn from(weather: WeatherSettings) -> HashMap<String, Value> {
        let mut json_object = HashMap::new();
        json_object.insert("forecast_days".to_owned(),
                           Value::Int(weather.forecast_days));
        return json_object;
    }
}

fn main() {}
使用std::collections::HashMap;
发布枚举值{
Int(i64),
对象(HashMap),
}
发布结构设置{
预测天数:i64,
}
impl天气设置{
fn解析(&self)->值{
让json_对象:HashMap=*self.into();
值::对象(json_对象)
}
}
用于HashMap的impl-From{
fn from(天气:天气设置)->HashMap{
让mut json_object=HashMap::new();
json_object.insert(“forecast_days.”to_owned(),
值::Int(天气预报天数);
返回json_对象;
}
}
fn main(){}
更直接地说,我得到了错误:

错误:此值的类型在此上下文中必须是已知的
-->src/main.rs:14:51
|
14 |让json_对象:HashMap=*self.into();
|                                                   ^^^^^^^^^^^^
当没有类型参数或属性时,我如何暗示值的类型

在绝大多数情况下,Rust编译器可以根据泛型类型值的使用方式推断类型或函数的泛型类型

在某些情况下,没有足够的信息为泛型类型精确推断一种类型,但总有一种方法可以在类型参数存在时传递它们

这样做的两种方法是使用turbofish或在呼叫站点

大菱鲆 turbofish是附加到函数或类型的符号
。看到它看起来像条鱼了吗

函数示例 定义如下:

pub const fn size_of<T>() -> usize.
impl<T> Vec<T> {
    pub fn new() -> Vec<T>
}
trait From<T> {
    fn from(T) -> Self;
}
您可以将其称为:

std::mem::size_of::<i8>()
//               ^^^^^^ turbofish
Vec::<u8>::new()
// ^^^^^^ turbofish
    <String as From<&str>>::from("a")
//  ^^^^^^^^^^^^^^^^^^^^^^ fully qualified syntax
您可以将其称为:

std::mem::size_of::<i8>()
//               ^^^^^^ turbofish
Vec::<u8>::new()
// ^^^^^^ turbofish
    <String as From<&str>>::from("a")
//  ^^^^^^^^^^^^^^^^^^^^^^ fully qualified syntax
那不是你的问题

要使此行有效,请执行以下操作:

let json_object: HashMap<String, Value> = *self.into();
这意味着您不能移动字符串,而是必须复制它们。这就是
&self
设置的限制