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

9
一个变量和函数名相同,我该如何调用函数?
fn main() {
    let a = 1;
    fn a() -> i32 {
        2
    }
    println!("{}", a());
}

Rust编译器告诉我:
error[E0618]: expected function, found `{integer}`

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

10
显而易见的解决方案是:没有任何东西强制你的变量名称与函数名称相同。更改它即可。 - Shepmaster
1个回答

8
这是因为您在println的作用域中没有同时具有函数和整数。由于通常可以在声明之前使用函数(即它们会被“提升”),所以它们在作用域开始时就被概念化移动了。其结果是函数声明在整数变量声明之前并被遮蔽了。修复代码的真正方法取决于您的确切情况。也许可以尝试类似以下的方式:
fn main() {
    {
        let a = 1;
        // use the integer there
    }
    fn a() -> i32 {
        2
    }
    println!("{}", a());
}

1
或者,你知道的,不要为两个不同的对象使用相同的名称。 - Acccumulation
概念上提升?看起来像是一个错误;作用域应该按词法顺序排列。EOF-y面朝上,不要弄乱。 - Kaz
4
在Rust中,你可以调用一个函数而不管它是在你所在的函数之前还是之后声明的。这并不是一个bug,非常方便。 - Denys Séguret
在这种情况下,该命名空间中的所有标识符都应遵循相同的规则。如果我有一个函数值变量呢?它应该与相同作用域中的函数混合一样处理。 - Kaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接