当变量和函数同名时如何调用函数?

hzq*_*elf 9 rust

变量和函数具有相同的名称。如何调用函数?

fn main() {
    let a = 1;
    fn a() -> i32 {
        2
    }
    println!("{}", a());
}
Run Code Online (Sandbox Code Playgroud)

Rust 编译器告诉我:

error[E0618]: expected function, found `{integer}`
Run Code Online (Sandbox Code Playgroud)

换句话说,Rust 编译器不会调用a函数,而是访问a变量。

Den*_*ret 8

这是无法完成的,因为您在拥有println.

因为函数通常可用于整个范围(即您可以在声明之前使用它们),所以它们的声明在概念上被移动到范围的开头(它们被“提升”)。

结果是函数声明在整数变量声明之前并被隐藏。

您的代码的真正修复将取决于您的具体情况。也许是这样的:

fn main() {
    {
        let a = 1;
        // use the integer there
    }
    fn a() -> i32 {
        2
    }
    println!("{}", a());
}
Run Code Online (Sandbox Code Playgroud)

  • 反向阴影示例表达相同的想法:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=de828d843e285e4b355c95d7d95fda0c (5认同)
  • @Kaz在Rust中,你可以调用一个函数,不管它是在你所在的函数之前还是之后声明的。这不是一个错误,它“非常”方便 (4认同)