컴파일러의 입장에서 생각해보며 오류를 줄여보기
매우 간단한 내용이지만 재미있는 내용이 나와서 정리를 해본다
Empty Tuple이란 ()
와 같이 비어있는 Tuple을 의미한다.
예시 코드
fn give() {
}
위 코드의 보이지 않는 부분까지 보이게 되면 다음과 같다
fn give() -> () {
}
해당 코드에서 컴파일러는 어떤 것을 기대하고 있을까??
바로 give
라는 함수를 호출하게 되면 Empty Tuple
값이 return 된다는 것을 기대하고 있을 것이다.
사람도 무엇인가를 기대하고 있는데 뜻대로 되지 않으면 실망하게 된다.
그리고 컴파일러도 마찬가지다. 다음 코드를 보자
fn give() {
3
}
fn main() {
let my_tuple = give();
println!("{my_tuple}")
}
결과:
error[E0308]: mismatched types
--> src\main.rs:2:5
|
1 | fn give() {
| - help: try adding a return type: `-> i32`
2 | 3
| ^ expected `()`, found integer
Empty Tuple
을 기대하고있었는데 정작 i32
타입이 나와서 에러를 출력한다.
아마 매우 실망했을 것이다.
위 코드에서 3
이라는 숫자를 return
하는 함수를 제대로 이용해서 바로잡아보자.
fn give() -> i32 {
3
}
fn main() {
let my_i32 = give();
println!("{my_i32}")
}
위 코드에서 fn give() -> i32 {
부분에 컴파일러에게 give
함수를 사용하면 i32
타입이 return
된다는 것을 알려준다
아마 컴파일러는 give
를 호출하게 되면 i32
가 나온다는 것을 기대하고 있을 것이다.
결과는 다음과 같다.
Finished dev [unoptimized + debuginfo] target(s) in 0.05s
Running `target\debug\cat.exe`
3
Process finished with exit code 0
내용 출처:
> mithradates - 프로그래밍 언어 러스트를 배웁시다!