Rust: Fix lỗi 'cannot move out of' borrowing errors in Rust
TIL
763
Rust
28
White

Giang Nguyen viết ngày 20/09/2016

Ví dụ chương trình:

fn main() {
    let name = "Kipalog ".to_string();

    let trimmed_name = name.trim();

    let owned_name = name;
 }

Khi compile nó sẽ xảy rã lỗi

error: cannot move out of `name` because it is borrowed [E0505]

hiểu đơn giản thì lúc này biến trimmed_name borrow biến name để thực hiện hàm trim, nếu Rust cho phép việc này thì luc này sẽ xảy ra tình trạng biến trimmed_name sẽ là một dangling pointer.

Để fix vẫn đề này thì có 1 số giải pháp:

Đưa vào scope

fn main() {
    let name = "Kipalog ".to_string();
    {
        let trimmed_name = name.trim();
    } // auto destroyed trimed_name

    let owned_name = name;
 }

Dùng clone

fn main() {
    let name = "Kipalog ".to_string();
    let trimmed_name = name.clone().trim();
    let owned_name = name;
 }

Dùng closure + lifetime

fn main() {
    let name: &'static str = "Kipalog ";
    let f = |name: &'static str| -> &'static str {
        name.trim() // no ; end line
        // Can use return name.trim();
    }
    let trimmed_name = f(&name);
    println!("trimmed name {}", trimmed_name);
    let owned_name = name;
}

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Giang Nguyen

20 bài viết.
35 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
35 5
(Ảnh) Hai ngày nay mình đã tìm hiểu về Amazon S3, Cloudfront và Letsencrypt để xây dựng 2 trang web static, thứ nhất là trang chủ của (Link) và t...
Giang Nguyen viết gần 4 năm trước
35 5
White
10 0
Đôi dòng về ID3 (Ảnh) Nếu bạn nào chưa biết thì có thể đọc phần này, hoặc biết rồi thì có thể next tới phần kế tiếp nhé. 1. Giới thiệu Như hì...
Giang Nguyen viết hơn 3 năm trước
10 0
White
10 0
Type Result Type trên dùng để làm gì? Result được dùng cho những trường hợp chúng ta muốn return lại một giá trị nào đó (Ok) hoặc propagating erro...
Giang Nguyen viết hơn 3 năm trước
10 0
Bài viết liên quan
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết hơn 2 năm trước
0 4
White
4 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết hơn 1 năm trước
4 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
20 bài viết.
35 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!