Làm thế nào để tạo cấu trúc với các thành viên chuỗi? Các thành viên nên được sở hữu bởi đối tượng struct. Tôi mới bị rỉ sét, xin lỗi vì câu hỏi đơn giản nhưng tôi không thể tìm thấy một ví dụ. Có một số ví dụ đã lỗi thời bằng cách sử dụng "~" dường như không được dùng nữa ... Tôi đang tìm kiếm khai báo chính xác về cấu trúc và sau đó là ví dụ instantiation.Rust: Cách tạo cấu trúc với các thành viên chuỗi?
Trả lời
Nếu chuỗi phải thuộc sở hữu của cấu trúc, thì bạn nên sử dụng String
. Ngoài ra, bạn có thể sử dụng &str
với thời gian tồn tại tĩnh (tức là tuổi thọ của chương trình). Ví dụ:
struct Foo {
bar: String,
baz: &'static str,
}
fn main() {
let foo = Foo {
bar: "bar".to_string(),
baz: "baz",
};
println!("{}, {}", foo.bar, foo.baz);
}
Nếu tuổi thọ của chuỗi là không rõ, sau đó bạn có thể parameterize Foo
với một đời người:
struct Foo<'a> {
baz: &'a str,
}
Và nếu bạn không chắc chắn liệu chuỗi sẽ được sở hữu hay không (hữu dụng để tránh phân bổ), sau đó bạn có thể sử dụng borrow::Cow
:
use std::borrow::Cow;
struct Foo<'a> {
baz: Cow<'a, str>,
}
fn main() {
let foo1 = Foo { baz: Cow::Borrowed("baz") };
let foo2 = Foo { baz: Cow::Owned("baz".to_string()) };
println!("{}, {}", foo1.baz, foo2.baz);
}
Lưu ý rằng loại Cow
là ov tham số er suốt đời. Vòng đời đề cập đến thời gian tồn tại của được mượn chuỗi (tức là khi nó là Borrowed
). Nếu bạn có Cow
, thì bạn có thể sử dụng borrow
và nhận được &'a str
, bạn có thể thực hiện các thao tác chuỗi bình thường mà không phải lo lắng về việc có nên phân bổ chuỗi mới hay không. (Thông thường, gọi điện thoại rõ ràng của borrow
không cần vì deref. Cụ thể, giá trị này sẽ Cow
deref mẫu mượn của họ tự động. Vì vậy, &*val
nơi val
có kiểu Cow<'a, str>
sẽ sản xuất một &str
.)
Cú pháp ~
thực sự là bị phản đối . Việc thay thế cho ~str
là String
, mà bạn có thể coi là bộ đệm chuỗi (tức là nội dung của chuỗi có thể sửa đổi và có thể phát triển được). A &str
là một chế độ xem bất biến của chuỗi không thể thay đổi được trong mã an toàn.
Uhhh, cảm ơn bạn đã trả lời đầy đủ. Tôi cần phải suy nghĩ về parametrization suốt đời một ngày :) – vladimir
- 1. Cấu trúc tĩnh với các thành viên tĩnh
- 2. Vector cấu trúc với các thành viên const?
- 3. Có một điểm chuỗi giữa các khởi tạo thành viên cấu trúc không?
- 4. C++ Cấu trúc thành viên cấu trúc không đổi
- 5. Khởi tạo rõ ràng cấu trúc/thành viên lớp
- 6. Thành viên của cấu trúc Dirent
- 7. Cách khởi tạo cấu trúc thành viên trong danh sách khởi tạo của lớp C++?
- 8. std :: viên cấu trúc unique_ptr với loại cấu trúc
- 9. Cấu trúc với một thành viên có hiệu suất giống như kiểu thành viên không?
- 10. Làm thế nào để khởi tạo một cấu trúc với thành viên mảng linh hoạt
- 11. Cách khởi tạo cấu trúc?
- 12. C khởi tạo cấu trúc const thành viên với biến const hiện tại
- 13. C++ Cấu trúc giống như bạn bè cho Rust
- 14. Thành viên cấu trúc chưa được khởi tạo luôn được đặt thành 0 không?
- 15. C++: cấu trúc thành viên trong câu lệnh switch
- 16. Nhiều thẻ trên cùng một thành viên cấu trúc Go
- 17. Có cách nào nhanh hơn/ngắn hơn để khởi tạo biến trong cấu trúc Rust?
- 18. Chức năng mẫu trên cấu trúc thành viên
- 19. Giải quyết cấu trúc công đoàn trong Rust FFI
- 20. con trỏ để hoạt động với tư cách là thành viên tĩnh trong cấu trúc
- 21. Mục đích của thành viên cbSize trong cấu trúc Win32API
- 22. bao gồm cả lớp là thành viên trong cấu trúc
- 23. Có cách nào để tạo giá trị cấu trúc C++-initialize tất cả các biến thành viên POD không?
- 24. Làm thế nào để khởi tạo const thành viên của cấu trúc trên heap
- 25. Cách tạo giao diện .NET với các thành viên tĩnh?
- 26. Đọc tệp XML thành cấu trúc
- 27. Cấu trúc công khai/riêng tư trong Rust
- 28. Tạo cấu trúc Hashable?
- 29. Cách tạo cấu trúc dự án Visual Studio C++ khớp với cấu trúc hệ thống tệp?
- 30. Địa chỉ của cấu trúc có giống với địa chỉ của thành viên đầu tiên không?
Sử dụng 'Chuỗi' và lưu ý rằng việc tạo một' Chuỗi' từ '& str' qua' .to_string() 'liên quan đến phân bổ đống + sao chép toàn bộ chuỗi. – sellibitze