Bir tamsayıdan dizeye nasıl dönüştürebilirim?


94

Bir türü tam sayıdan dizeye dönüştüren kodu derleyemiyorum. Rust for Rubyists eğitiminden çeşitli tür dönüşümleri olan bir örnek çalıştırıyorum, örneğin :

"Fizz".to_str()ve num.to_str()(nerede numbir tam sayıdır).

Sanırım bu to_str()işlev çağrılarının çoğu (hepsi değilse de) kullanımdan kaldırıldı. Bir tamsayıyı dizeye dönüştürmenin şu anki yolu nedir?

Aldığım hatalar:

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`

Takip etmiyorsam özür dilerim ama int kaynağına bakmayı denedim ve doc.rust-lang.org/0.11.0/std/num/strconv/index.html kullanıyor gibi görünüyor ama bu sadece bir bayt vektörü döndürüyor . Buna ek olarak, bir to_string()yöntem vardır, ancak bu Stringbir değişmez dize değil döndürür .
user3358302

haha boşver, to_str()farklı bir dönüş değeri olduğunu düşündüm , kullanacağımto_string()
user3358302

1
@ user3358302, hiçbir yöntem statik olarak bilinen değişmez değerleri döndürmedikçe "değişmez dize" olarak adlandırdığınız bir şeyi döndüremez çünkü bu değerlerin türü vardır &'static str, yani dinamik olarak oluşturulmuş veriler kullanılarak elde edilmesi imkansız olan statik yaşam süresine sahip bir dize dilimi. Bunları yalnızca dize değişmezlerini kullanarak oluşturabilirsiniz.
Vladimir Matveev

bunu bildiğim iyi oldu! Sanırım yöntemin to_strbir Stringnesne yerine bir dizgi dilimi döndürdüğünü düşünerek kafamı karıştırdı (dediğin gibi, netlik için yeniden adlandırdılar) .
user3358302

Yanıtlar:


131

Kullanın to_string()( burada örnek çalıştırın ):

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

Haklısın; Tutarlılık için Rust 1.0 yayınlanmadan önce to_str()olarak yeniden adlandırıldı to_string()çünkü ayrılmış bir dize artık çağrıldı String.

Bir yere bir dize dilimi geçirmeniz gerekiyorsa, adresinden bir &strreferans almanız gerekir String. Bu, &bir deref zorlama kullanılarak yapılabilir :

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

Bağlandığınız eğitim eski görünüyor. Rust'taki dizelerle ilgileniyorsanız, Rust Programlama Dili'nin dizeler bölümüne bakabilirsiniz .


1
Çok teşekkürler dostum, bu her şeyi açıklığa kavuşturuyor :) Ayrıca bu öğreticiden geçeceğim çünkü dizi dönüştürme pas durumunda hala değişen bir şey gibi görünüyor.
user3358302
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.