Let str::replace take a pattern
It appears this was left out of RFC #528 because it might be useful to also generalize the second argument in some way. That doesn't seem to prevent generalizing the first argument now, however. This is a [breaking-change] because it could cause type-inference to fail where it previously succeeded.
This commit is contained in:
parent
8864f2c83a
commit
e7f3d6eddd
2 changed files with 10 additions and 1 deletions
|
@ -1706,7 +1706,7 @@ impl str {
|
||||||
/// assert_eq!(s, s.replace("cookie monster", "little lamb"));
|
/// assert_eq!(s, s.replace("cookie monster", "little lamb"));
|
||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
pub fn replace(&self, from: &str, to: &str) -> String {
|
pub fn replace<'a, P: Pattern<'a>>(&'a self, from: P, to: &str) -> String {
|
||||||
let mut result = String::new();
|
let mut result = String::new();
|
||||||
let mut last_end = 0;
|
let mut last_end = 0;
|
||||||
for (start, part) in self.match_indices(from) {
|
for (start, part) in self.match_indices(from) {
|
||||||
|
|
|
@ -269,6 +269,15 @@ fn test_replace_2d() {
|
||||||
assert_eq!(data.replace(d, repl), data);
|
assert_eq!(data.replace(d, repl), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_replace_pattern() {
|
||||||
|
let data = "abcdαβγδabcdαβγδ";
|
||||||
|
assert_eq!(data.replace("dαβ", "😺😺😺"), "abc😺😺😺γδabc😺😺😺γδ");
|
||||||
|
assert_eq!(data.replace('γ', "😺😺😺"), "abcdαβ😺😺😺δabcdαβ😺😺😺δ");
|
||||||
|
assert_eq!(data.replace(&['a', 'γ'] as &[_], "😺😺😺"), "😺😺😺bcdαβ😺😺😺δ😺😺😺bcdαβ😺😺😺δ");
|
||||||
|
assert_eq!(data.replace(|c| c == 'γ', "😺😺😺"), "abcdαβ😺😺😺δabcdαβ😺😺😺δ");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_slice() {
|
fn test_slice() {
|
||||||
assert_eq!("ab", &"abc"[0..2]);
|
assert_eq!("ab", &"abc"[0..2]);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue