簡體   English   中英

將字符串轉換為 &str 的慣用方法是什么?

[英]What is the idiomatic way to convert a String to &str?

我找到了多種將String轉換為&str 今天哪一個是正確的/慣用的?

let string = "hello".to_string();

let string_slice1 = &string[..];
let string_slice2: &str = &string;
let string_slice3 = &*string;

如果不在變量聲明中指定類型,我將如何使第二種方法工作? &string as &str東西(但它不起作用)。 我看到&string具有&String類型,但是當它隱式轉換為&str ,它將執行隱式轉換。 我如何使這種轉換顯式?

String實現了兩件重要的事情:

  • Index<RangeFull, Output = str> :這使string[..]成為str類型,盡管您需要引用它(通過調用方法,允許 autoref 發生,或顯式為&string[..] )。 這解釋了string_slice1

  • Deref<Target = str> :這使得*string成為str類型,對未定義類型的考慮與索引相同。 這就是為什么string_slice3作品和有點隱蔽的行為為什么string_slice2作品。

與 C++ 不同, &不是純引用運算符:它還允許先解除引用。 &string因此通常是&String類型,但如果需要,它也可以是&str類型。 例如,如果您要將它傳遞給采用&str的方法,它就會起作用,或者如果您嘗試將其綁定到&str類型的變量。 這就是為什么: &str在這種情況下是必要的。

普遍的共識是在可行的情況下應避免類型歸屬,因此第二種形式是不可取的。 在第一個和第三個之間,對於哪個更可取還沒有達成共識。

還有String::as_str ,有些人更喜歡:

let string_slice4 = string.as_str();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM