Catatan: pertanyaan ini mengandung kode pra-1.0 yang sudah usang! Jawabannya benar.
Untuk mengonversi a str
menjadi int
dalam Rust, saya dapat melakukan ini:
let my_int = from_str::<int>(my_str);
Satu-satunya cara saya tahu cara mengonversikan String
ke int
adalah dengan mendapatkan sepotong dan kemudian menggunakannya from_str
seperti:
let my_int = from_str::<int>(my_string.as_slice());
Apakah ada cara untuk secara langsung mengkonversi a String
ke int
?
use std::str::FromStr;
memperbaikinya. Lebih lanjut tentang from_str jika Anda mau. doc.rust-lang.org/std/str/trait.FromStr.html#tymethod.from_strJawaban:
Anda dapat langsung mengonversi ke int menggunakan
str::parse::<T>()
metode ini .Anda dapat menentukan jenis yang akan diuraikan dengan operator turbofish (
::<>
) seperti yang ditunjukkan di atas atau melalui anotasi jenis eksplisit:Seperti yang disebutkan dalam komentar,
parse()
mengembalikan aResult
. Hasil ini akan menjadiErr
jika string tidak dapat diuraikan sebagai tipe yang ditentukan (misalnya, string"peter"
tidak dapat diuraikan sebagaii32
).sumber
parse
mengembalikan aResult
, jadi Anda harus menghadapinya dengan tepat untuk mendapatkan tipe integral yang sebenarnya.str::parse::<u32>
mengembalikan aResult<u32, core::num::ParseIntError>
danResult::unwrap
"Membongkar hasil, menghasilkan kontenOk
[atau] panik jika nilainya adalahErr
, dengan pesan panik yang disediakan oleh nilaiErr
's."str::parse
adalah fungsi generik , maka jenis kurung sudut.sumber
let my_u8: u8
), maka Anda tidak perlu nilai dalam kurung sudut. Perhatikan juga bahwa gaya Karat yang berlaku menunjukkan bahwa:
harus menempel di sisi kiri.let my_u32: u32 = "42".parse().unwrap()
Jika Anda mendapatkan string dari
stdin().read_line
, Anda harus memotongnya terlebih dahulu.sumber
Dengan malam baru-baru ini, Anda dapat melakukan ini:
Apa yang terjadi di sini adalah yang
String
sekarang dapat direferensikan menjadistr
. Namun, fungsi menginginkan&str
, jadi kita harus meminjam lagi. Untuk referensi, saya percaya pola khusus ini (&*
) disebut "pinjaman silang".sumber
String
pada satu titik dan berharap itu akan berhasil.my_sttring.as_slice()
sebagaimy_string[]
(saat inislicing_syntax
adalah fitur-gated, tetapi kemungkinan besar beberapa bentuk itu akan berakhir dalam bahasa).Anda dapat menggunakan metode
FromStr
sifatfrom_str
, yang diterapkan untuki32
:sumber
Ya tidak. Kenapa harus ada? Buang saja string jika Anda tidak membutuhkannya lagi.
&str
lebih berguna daripadaString
saat Anda hanya perlu membaca string, karena itu hanya tampilan ke bagian data asli, bukan pemiliknya. Anda dapat menyebarkannya lebih mudah daripadaString
, dan dapat disalin, sehingga tidak dikonsumsi oleh metode yang dipanggil. Dalam hal ini lebih umum: jika Anda memilikiString
, Anda dapat meneruskannya ke tempat yang&str
diharapkan, tetapi jika Anda memilikinya&str
, Anda hanya dapat meneruskannya ke fungsi yang diharapkanString
jika Anda membuat alokasi baru.Anda dapat menemukan lebih banyak tentang perbedaan antara keduanya dan kapan menggunakannya dalam panduan string resmi .
sumber
.as_slice()
setiap kali saya harus melakukanfrom_str
pada String. Argumen baris perintah, misalnya, adalah satu tempat di mana saya perlu melakukanfrom_str
pada semua argumen untuk menafsirkannya sebagaiint
dll.as_slice()
hanyalah aspek minor dari penanganan string. Misalnya, Anda bisa menggunakan slicing syntax (s[]
) atau exploitDeref
coersion (&*s
). Bahkan ada proposal yang akan memungkinkan untuk menulis adil&s
.&s
dilakukan untuk sebuah string? Apakah itu akan memberistr
balasan? Bisakah Anda mengarahkan saya ke proposal?str
bukan apa yang Anda kerjakan; itu&str
. Mereka berbeda (tetapi terkait). Yang pertama adalah tipe berukuran dinamis yang hampir tidak akan pernah Anda gunakan secara langsung, sedangkan yang terakhir adalah string slice yang merupakan penunjuk gemuk. Proposal ini disebut paksaan deref ; itu akan memungkinkan untuk memaksa dari&T
ke&U
jikaT: Deref<U>
. KarenaString: Deref<str>
sudah, Anda akan dapat memperoleh&str
dariString
dengan adil&
. Masih dalam diskusi tetapi saya ragu itu akan terjadi sebelum 1.0 - masih ada sedikit waktu yang tersisa.Jadi pada dasarnya Anda ingin mengubah String menjadi Integer kan! inilah yang paling sering saya gunakan dan itu juga disebutkan dalam dokumentasi resmi ..
Ini berfungsi untuk String dan & str. Harapan ini juga akan membantu.
sumber