inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Giới thiệu và sử dụng Rust, một ngôn ngữ lập trình tinh tế, hiệu suất cao

메모리 관리규칙에서 질문드립니다.

Đã giải quyết

210

saintheaven78290

6 câu hỏi đã được viết

1

fn main() {

    let s: String = String::from("헬로");

    let (s, len) = string_length(s);

    println!("문자열 {}의 길이는 {}", s, len);

}


fn string_length(s: String) -> (String, usize) {

    (s, s.len())

}


string_length 함수에서 선생님께서 쓰신 코드와 순서를 바꿔 입력하였을때 오류가 발생합니다.

 

선생님: (s.len(), s)

저 :(s, s.len())

 

물론 메인함수의 (s, len) 순서도 수정하였으며, string_length 함수의 반환타입도 순서도 수정하였습니다.

rust webassembly

Câu trả lời 1

1

hatemogi

수강 및 예리한 질문 감사드립니다.

실험해보신 내용처럼 (s, s.len())으로 응답 튜플의 순서를 바꾸었을 때, 아래와 같은 컴파일 오류가 발생하는 것을 확인하였습니다.

 

Screenshot 2024-08-13 at 5.46.52 PM.png

 

에러의 내용은, 튜플의 첫번째 요소로써, s를 반환하기로 했기 때문에, 이 시점에 이미 소유권 반납이 이뤄졌다고 보는 거라고 이해하면 될 것 같습니다. 이미 소유권이 반납된 s를 이용해서 .len()메소드를 호출하려 할 때의 상황입니다.

 

이 문제를 해결하려면, len을 미리 값을 구해두면 되겠습니다.

 

fn main() {
    let s: String = String::from("헬로");
    let (s, len) = string_length(s);
    println!("문자열 {}의 길이는 {}", s, len);
}

fn string_length(s: String) -> (String, usize) {
    let len = s.len();
    (s, len)
}

괜한 번거로움이니, 원래대로 usize를 앞에 담은 튜플을 반환하는 것이 편하겠고, 더 나아가 이후 강의에 설명드리는 임대 개념을 사용하면 좋을 것 같습니다.

우선 이 질문과 답변의 핵심은, 소유권의 이동 시점에 관한 것이겠습니다.

 

감사합니다.

 

다음강의 플랜이 어떻게 되실까요?

0

35

1

소스코드

0

32

1

강의 자료 ppt나 pdf 파일은 없을까요?

0

69

1

선생님 ppt자료를 받아서 공부하고 싶습니다.

0

52

2

Rust는 어떻게 컴파일 타임에 dangling reference를 막나요?

0

70

2

강의 추가 계획 질문

0

76

2

소유권 이전과 관련된 질문입니다

0

148

2

&r1 을 써야하는지 r1을 써야하는지?

1

120

1

임대값 수명에 대한 질문

1

122

1

변수 가리기 shadowing 을 듣고 궁금한점이 생겼습니다.

1

154

1

튜플 구조체에서 println! 사용시 에러가 발생합니다.

0

166

1

튜플과 구조체 차이 설명에 관한 질문

0

377

1

튜플과 배열 강의 4:50에서 벡터 나중에 설명해주신다고 하셨는데

0

193

1

trait를 인자로 받을 때 &impl과 &dyn차이

1

366

2

구조체는 언제나 Heap에 저장되나요??

2

418

2

Lifecycle 강의에서 두 문자열 슬라이스를 비교해 긴 문자열 슬라이스를 리턴하는 것 관련 질문

0

268

1

혹시 어떤 폰트일까요?

0

457

2

build 오류

0

403

1

웹 어플리케이션 개발에도 잘 사용되나요?

1

458

1

임대값의 수명 강의가 재생이 안되고 있습니다~

0

413

3

임대값의 수명에 대한 강의는 언제쯤 볼 수 있을까요?

0

350

2

문자열 리터럴이 너무 어려워요ㅠㅠ

1

556

1

Integer는 자동으로 copy되서(copy type)(integer 는 stack에 할당되서)

0

367

2

명령어를 입력 한 후 source "$HOME/.cargo/env" 이 명령어를 입력해야 합니다.

0

337

2