Функция - это переменная. когда вы используете то же имя переменной в новой области видимости, она использует это новое объявление во всей этой области. Итак, в функции main()
вы перезаписываете переменную name
новым значением "xyz"
. Ваш код по сути "xyz"("xyz")
.
В качестве другого примера, что будет печатать этот код?
fn name() {
println!("hi");
}
fn main() {
fn name() {
println!("bye");
}
name();
}
Он будет печатать "bye"
, поскольку он вызывает local function name
.
Заметным исключением из этого правила является повторное объявление функции в той же области (будь то верхний уровень или контекст функции):
fn name() {
println!("a");
}
fn name() {
println!("b");
}
fn main() {
fn name() {
println!("c");
}
fn name() {
println!("d");
}
name();
}
Это выдаст вам две ошибки, по одной для каждой области, в которой вы объявили это дважды.
|
1 | fn name() {
| --------- previous definition of the value `name` here
...
4 | fn name() {
| ^^^^^^^^^ `name` redefined here
|
= note: `name` must be defined only once in the value namespace of this module
error[E0428]: the name `name` is defined multiple times
--> src/main.rs:11:5
|
8 | fn name() {
| --------- previous definition of the value `name` here
...
11 | fn name() {
| ^^^^^^^^^ `name` redefined here
|
= note: `name` must be defined only once in the value namespace of this block