Làm cách nào để chuyển từ số nguyên sang chuỗi?


88

Tôi không thể biên dịch mã chuyển đổi một kiểu từ số nguyên sang chuỗi. Tôi đang chạy một ví dụ từ hướng dẫn Rust for Rubyists có các chuyển đổi kiểu khác nhau như:

"Fizz".to_str()num.to_str()(ở đâu numlà số nguyên).

Tôi nghĩ rằng phần lớn (nếu không phải tất cả) các to_str()lệnh gọi hàm này đã không được dùng nữa. Cách hiện tại để chuyển đổi một số nguyên thành một chuỗi là gì?

Các lỗi tôi gặp phải là:

error: type `&'static str` does not implement any method in scope named `to_str`
error: type `int` does not implement any method in scope named `to_str`

xin lỗi nếu tôi không theo dõi nhưng tôi đã thử tra cứu nguồn int và có vẻ như sử dụng doc.rust-lang.org/0.11.0/std/num/strconv/index.html nhưng điều này chỉ trả về một vectơ byte . Ngoài ra, có to_string()phương thức nhưng trả về Stringvà không phải là một chuỗi ký tự.
user3358302

haha nevermind, tôi nghĩ to_str()được một giá trị trả về khác nhau, tôi sẽ sử dụngto_string()
user3358302

1
@ user3358302, không có phương thức nào có thể trả về thứ mà bạn gọi là "chuỗi ký tự" trừ khi chúng trả về các ký tự tĩnh đã biết bởi vì các giá trị này có kiểu &'static str, tức là một lát chuỗi có thời gian tồn tại tĩnh, không thể lấy bằng dữ liệu được tạo động. Bạn chỉ có thể tạo chúng bằng cách sử dụng các ký tự chuỗi.
Vladimir Matveev

tốt để biết! Tôi nghĩ rằng phương pháp đã to_strlàm tôi bối rối (như bạn đã nói, họ đã đổi tên cho rõ ràng) khi nghĩ rằng nó đang trả về một chuỗi chuỗi thay vì một Stringđối tượng.
user3358302

Câu trả lời:


124

Sử dụng to_string()( chạy ví dụ ở đây ):

let x: u32 = 10;
let s: String = x.to_string();
println!("{}", s);

Bạn đúng; to_str()đã được đổi tên thành to_string()trước khi Rust 1.0 được phát hành để đảm bảo tính nhất quán vì một chuỗi được cấp phát hiện được gọi String.

Nếu bạn cần chuyển một lát chuỗi ở đâu đó, bạn cần lấy &strtham chiếu từ String. Điều này có thể được thực hiện bằng cách sử dụng &và một sự ép buộc bỏ qua:

let ss: &str = &s;   // specifying type is necessary for deref coercion to fire
let ss = &s[..];     // alternatively, use slicing syntax

Hướng dẫn bạn đã liên kết có vẻ đã lỗi thời. Nếu bạn quan tâm đến chuỗi trong Rust, bạn có thể xem qua chương chuỗi của Ngôn ngữ lập trình Rust .


1
Cảm ơn rất nhiều người đàn ông, điều này sẽ làm rõ ràng mọi thứ :) Ngoài ra tôi sẽ xem qua hướng dẫn đó vì chuyển đổi chuỗi có vẻ như một cái gì đó vẫn đang thay đổi trên gỉ.
user3358302
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.