![](/img/trans.png)
[英]What is the most idiomatic way to convert a string to characters in Erlang?
[英]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.