> And hopefully in the future the regular expression library will be updated to > work on StrBuf instead of &str This is very unlikely. See, you can go from `StrBuf` to `&str` without allocation - `as_slice()` returns a "view" into the `StrBuf`. This is very cheap operation. But you cannot go from `&str` to `StrBuf` without allocation and copying, which are much more expensive than slicing. Hence you should always try to use `&str` where possible, only resorting to `StrBuf` when absolutely necessary (for example, when you need to accumulate a string dynamically). All APIs should also take `&str` when possible.
2014-05-26 11:31 GMT+04:00 Urban Hafner <[email protected]>: > Thanks guys, I now use "as_slice()" when necessary. And hopefully in the > future the regular expression library will be updated to work on StrBuf > instead of &str as this seems to be the main use case (read in file, run > regexp on it). > > Urban > > > On Mon, May 26, 2014 at 8:58 AM, Vladimir Matveev <[email protected]> > wrote: >> >> > My suspicion is that the automatic conversion will come back at some >> > point, but I'm not sure. >> >> I think it will be possible to make `String` implement `Deref<str>` >> when DST land. Then it will be possible to convert from `String` to >> `&str` using explicit reborrowing: >> >> let sgf_slice = &*sgf; >> >> I'm not sure this will be fully automatic when `String` is an >> arbitrary actual argument to arbitrary function, however. >> >> 2014-05-26 10:36 GMT+04:00 Andrew Gallant <[email protected]>: >> > Try using `self.sgf.as_slice()` instead. >> > >> > The change is necessary, AFAIK, because `~str` would automatically be >> > converted to a borrowed reference without having to explicitly call the >> > `as_slice` method. This doesn't happen for the StrBuf (and what is now >> > String, I think) type. >> > >> > My suspicion is that the automatic conversion will come back at some >> > point, but I'm not sure. >> > >> > - Andrew >> > >> > >> > On Mon, May 26, 2014 at 2:32 AM, Urban Hafner <[email protected]> >> > wrote: >> >> Hello there, >> >> >> >> I just updated the compiler (I use the git master branch) and now when >> >> I >> >> read in a file I get a StrBuf instead of a ~str. That is easy enough to >> >> change, but how do I use regular expressions now? I have the following >> >> in my >> >> code: >> >> >> >> let re = regex!(r"SZ\[(\d+)\]"); >> >> let captures = re.captures(self.sgf).unwrap(); >> >> >> >> And it fails now because "self.sgf" is a StrBuf instead of a &str. Do I >> >> have >> >> just a Rust compiler that is somewhere in between (i.e. not everything >> >> has >> >> been changed to StrBuf) or is this intentional? And if so, what's the >> >> best >> >> way to use regular expressions now? >> >> >> >> Urban >> >> -- >> >> Freelancer >> >> >> >> Available for hire for Ruby, Ruby on Rails, and JavaScript projects >> >> >> >> More at http://urbanhafner.com >> >> >> >> _______________________________________________ >> >> Rust-dev mailing list >> >> [email protected] >> >> https://mail.mozilla.org/listinfo/rust-dev >> >> >> > _______________________________________________ >> > Rust-dev mailing list >> > [email protected] >> > https://mail.mozilla.org/listinfo/rust-dev > > > > > -- > Freelancer > > Available for hire for Ruby, Ruby on Rails, and JavaScript projects > > More at http://urbanhafner.com _______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
