Rust: Fix lỗi 'cannot move out of' borrowing errors in Rust
TIL
635
Rust
27
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.
34 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
30 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 2 năm trước
30 5
White
9 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 1 năm trước
9 0
White
8 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 1 năm trước
8 0
Bài viết liên quan
White
0 2
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 5 tháng trước
0 2
White
3 3
Hôm nay tự viết lại cái note này về quá trình học Rust, xem như là tự giúp mình nhớ sâu và rõ hơn về Rust. Note này sẽ ngắn gọn hơn bản (Link). Sơ...
Giang Nguyen viết gần 2 năm trước
3 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
20 bài viết.
34 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á!