변수와 함수의 이름이 같은 경우 어떻게 함수를 호출합니까?


10

변수와 함수의 이름은 동일합니다. 함수를 어떻게 호출합니까?

fn main() {
    let a = 1;
    fn a() -> i32 {
        2
    }
    println!("{}", a());
}

Rust 컴파일러는 나에게 말했다 :

error[E0618]: expected function, found `{integer}`

즉, Rust 컴파일러는 a함수를 호출하지 않고 대신 a변수에 액세스합니다 .


10
나는 명백한 해결책을 말할 것이다 : 변수가 함수와 같은 이름을 갖도록 강요하는 것은 아무것도 없다 . 바꾸십시오.
Shepmaster

답변:


9

함수가 있고 범위에 정수가 없으므로이 작업을 수행 할 수 없습니다 println.

함수는 일반적으로 전체 범위에서 사용할 수 있기 때문에 (즉, 선언하기 전에 사용할 수 있으므로) 선언이 개념적으로 범위의 시작 부분으로 이동합니다 ( "게양 됨").

결과적으로 함수 선언은 정수 변수 선언 이전이며 음영 처리됩니다.

코드의 실제 수정은 정확한 상황에 따라 다릅니다. 아마도 이런 식으로 뭔가 :

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

4
같은 생각을 표현하는 예를 그림자 역 : play.rust-lang.org/...
오메르 어든에게

1
또는 두 개의 다른 객체에 동일한 이름을 사용하지 마십시오.
누적

개념적으로 게양? 나에게 벌레처럼 보인다. 범위는 어휘 순서 여야합니다. EOF-y가 위로 향하게하고 스크램블되지 않았습니다.
Kaz

4
@Kaz Rust에서는 함수가 선언 된 이전 또는 이후에 선언되었는지 여부를 무시하고 함수를 호출 할 수 있습니다. 이것은 버그가 아니며 매우 편리합니다.
Denys Séguret

@ DenysSéguret이 경우 해당 네임 스페이스의 모든 식별자는 동일한 규칙을 따라야합니다. 함수 값 변수가 있으면 어떻게합니까? 동일한 범위의 기능을 혼합하여 동일하게 취급해야합니다.
Kaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.