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.