Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::ops::Shl;
- impl<T> Shl<T> for Vec<T> {
- type Output = Vec<T>;
- fn shl(&self, elem: &T) -> Vec<T> {
- self.push(*elem);
- *self
- }
- }
- fn main() {
- let v = vec![1, 2, 3];
- v << 4;
- }
- use somecrate::FooType;
- use somecrate::BarTrait;
- struct MyType(FooType);
- impl BarTrait for MyType {
- fn bar(&self) {
- match *self {
- MyType(foo) => {
- ....
- }
- }
- }
- }
- use std::ops::Shl;
- struct BadVec<T>(Vec<T>);
- impl<T> Shl<T> for BadVec<T> {
- type Output = BadVec<T>;
- fn shl(mut self, elem: T) -> Self::Output {
- self.0.push(elem);
- self
- }
- }
- fn main() {
- let mut v = BadVec(vec![1, 2, 3]);
- v = v << 4;
- assert_eq!(vec![1, 2, 3, 4], v.0)
- }
- use std::ops::{Deref, DerefMut};
- impl<T> Deref for BadVec<T> {
- type Target = Vec<T>;
- fn deref(&self) -> &Self::Target {
- &self.0
- }
- }
- impl<T> DerefMut for BadVec<T> {
- fn deref_mut(&mut self) -> &mut Self::Target {
- &mut self.0
- }
- }
- fn main() {
- let mut v = BadVec(vec![1, 2, 3]);
- v = v << 4;
- v.truncate(2);
- assert_eq!(2, v.len());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement