Struct 我是否需要始终将基结构放在main()之外,以便它们是全局结构?

Struct 我是否需要始终将基结构放在main()之外,以便它们是全局结构?,struct,rust,Struct,Rust,我正在浏览Rust文档,在创建带函数的结构时遇到了一个难题: fn main() { let s1 = String::from("bob"); let s2 = String::from("bob@aol.com"); struct User { name: String, email: String, } let user1 = build_user(s1, s2); //or &s1, &s2 }

我正在浏览Rust文档,在创建带函数的结构时遇到了一个难题:

fn main() {
    let s1 = String::from("bob");
    let s2 = String::from("bob@aol.com");

    struct User {
        name: String,
        email: String,
    }

    let user1 = build_user(s1, s2); //or &s1, &s2
}

fn build_user(email: String, name: String) -> User {
    //or &String, &String
    User { email, name }
}
错误显示:

错误[E0412]:在此作用域中找不到类型“User”
-->src/main.rs:13:47
|
13 | fn build_user(电子邮件:String,名称:String)->user{
|^^^^^在此作用域中找不到
错误[E0422]:在此作用域中找不到结构、变量或联合类型“User”
-->src/main.rs:15:5
|
15 |用户{电子邮件,姓名}
|^^^^^在此作用域中找不到

如果我想用一个函数构建一个结构,我是否也必须通过引用传递基本结构?

你不必总是把它们放在某个东西之外,但你必须在足够高的级别声明它们,以便所有想要使用它的人都能看到它,从可见性角度看

通过在
main
函数内部定义类型,只有
main
函数的主体可以访问它。在这种情况下,是的,您应该将结构的定义放在
main
之外,因为
main
build\u用户
都需要知道它:

struct User {
    name: String,
    email: String,
}

fn build_user(email: String, name: String) -> User {
    User { email, name }
}
继续阅读,您将发现编写此代码的惯用方法:

fn main() {
    let s1 = String::from("bob");
    let s2 = String::from("bob@aol.com");

    let user1 = User::new(s1, s2);
}

struct User {
    name: String,
    email: String,
}

impl User {
    fn new(email: String, name: String) -> User {
        User { email, name }
    }
}

你不必总是把它们放在某个东西之外,但你必须在足够高的级别上声明它们,以便所有想要使用它的人都能看到它,从可见性的角度来看

通过在
main
函数内部定义类型,只有
main
函数的主体可以访问它。在这种情况下,是的,您应该将结构的定义放在
main
之外,因为
main
build\u用户
都需要知道它:

struct User {
    name: String,
    email: String,
}

fn build_user(email: String, name: String) -> User {
    User { email, name }
}
继续阅读,您将发现编写此代码的惯用方法:

fn main() {
    let s1 = String::from("bob");
    let s2 = String::from("bob@aol.com");

    let user1 = User::new(s1, s2);
}

struct User {
    name: String,
    email: String,
}

impl User {
    fn new(email: String, name: String) -> User {
        User { email, name }
    }
}