ฉันจะแปลงจากจำนวนเต็มเป็นสตริงได้อย่างไร


94

ฉันไม่สามารถรวบรวมโค้ดที่แปลงประเภทจากจำนวนเต็มเป็นสตริงได้ ฉันใช้ตัวอย่างจากบทช่วยสอน Rust for Rubyistsซึ่งมีการแปลงประเภทต่างๆเช่น:

"Fizz".to_str()และ num.to_str()( numจำนวนเต็มอยู่ที่ไหน)

ฉันคิดว่าการto_str()เรียกใช้ฟังก์ชันเหล่านี้ส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) ได้เลิกใช้งานแล้ว วิธีปัจจุบันในการแปลงจำนวนเต็มเป็นสตริงคืออะไร?

ข้อผิดพลาดที่ฉันได้รับคือ:

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`

ขออภัยถ้าฉันไม่ติดตาม แต่ฉันได้ลองค้นหาแหล่ง int แล้วและดูเหมือนว่าจะใช้doc.rust-lang.org/0.11.0/std/num/strconv/index.htmlแต่สิ่งนี้จะส่งกลับเวกเตอร์ไบต์ . นอกจากนี้ยังมีto_string()วิธีการนี้ แต่จะส่งคืนStringไม่ใช่สตริงตามตัวอักษร
user3358302

ฮ่าฮ่าไม่เป็นไรฉันคิดว่าto_str()มันเป็นค่าตอบแทนที่แตกต่างฉันจะใช้to_string()
user3358302

1
@ user3358302 ไม่มีเมธอดใดที่สามารถส่งคืนสิ่งที่คุณเรียกว่า "สตริงตามตัวอักษร" ได้เว้นแต่จะส่งคืนลิเทอรัลที่รู้จักแบบคงที่เนื่องจากค่าเหล่านี้มีประเภท&'static strนั่นคือสไลซ์สตริงที่มีอายุการใช้งานคงที่ซึ่งเป็นไปไม่ได้ที่จะได้รับโดยใช้ข้อมูลที่สร้างแบบไดนามิก คุณสามารถสร้างได้โดยใช้ตัวอักษรสตริงเท่านั้น
Vladimir Matveev

ดีแล้วที่รู้! ฉันคิดว่าวิธีนี้to_strทำให้ฉันสับสน (ซึ่งอย่างที่คุณบอกพวกเขาเปลี่ยนชื่อเพื่อความชัดเจน) คิดว่ามันส่งคืนชิ้นสตริงแทนที่จะเป็นStringวัตถุ
user3358302

คำตอบ:


131

ใช้to_string()( ตัวอย่างการทำงานที่นี่ ):

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

คุณถูก; to_str()ถูกเปลี่ยนชื่อto_string()ก่อนสนิม 1.0 Stringได้รับการปล่อยตัวเพื่อความมั่นคงเพราะสตริงจัดสรรเรียกว่าตอนนี้

หากคุณต้องการที่จะผ่านบางสตริงชิ้นคุณจะต้องได้รับการอ้างอิงจาก&str Stringสิ่งนี้สามารถทำได้โดยใช้&และการบีบบังคับ deref:

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

บทช่วยสอนที่คุณเชื่อมโยงดูเหมือนจะล้าสมัย หากคุณกำลังสนใจในสตริงใน Rust คุณสามารถมองผ่านสตริงบทสนิมโปรแกรมภาษา


1
ขอบคุณหลาย ๆ คนสิ่งนี้ทำให้ทุกอย่างชัดเจน :) นอกจากนี้ฉันจะผ่านบทช่วยสอนนั้นเนื่องจากการแปลงสตริงดูเหมือนว่ามีบางอย่างที่ยังคงเปลี่ยนไปเมื่อสนิม
user3358302
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.