Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. use std::ops::Shl;
  2.  
  3. impl<T> Shl<T> for Vec<T> {
  4. type Output = Vec<T>;
  5.  
  6. fn shl(&self, elem: &T) -> Vec<T> {
  7. self.push(*elem);
  8. *self
  9. }
  10. }
  11.  
  12. fn main() {
  13. let v = vec![1, 2, 3];
  14. v << 4;
  15. }
  16.  
  17. use somecrate::FooType;
  18. use somecrate::BarTrait;
  19.  
  20. struct MyType(FooType);
  21.  
  22. impl BarTrait for MyType {
  23. fn bar(&self) {
  24. match *self {
  25. MyType(foo) => {
  26. ....
  27. }
  28. }
  29. }
  30. }
  31.  
  32. use std::ops::Shl;
  33.  
  34. struct BadVec<T>(Vec<T>);
  35.  
  36. impl<T> Shl<T> for BadVec<T> {
  37. type Output = BadVec<T>;
  38.  
  39. fn shl(mut self, elem: T) -> Self::Output {
  40. self.0.push(elem);
  41. self
  42. }
  43. }
  44.  
  45. fn main() {
  46. let mut v = BadVec(vec![1, 2, 3]);
  47. v = v << 4;
  48. assert_eq!(vec![1, 2, 3, 4], v.0)
  49. }
  50.  
  51. use std::ops::{Deref, DerefMut};
  52.  
  53. impl<T> Deref for BadVec<T> {
  54. type Target = Vec<T>;
  55.  
  56. fn deref(&self) -> &Self::Target {
  57. &self.0
  58. }
  59. }
  60.  
  61. impl<T> DerefMut for BadVec<T> {
  62. fn deref_mut(&mut self) -> &mut Self::Target {
  63. &mut self.0
  64. }
  65. }
  66.  
  67. fn main() {
  68. let mut v = BadVec(vec![1, 2, 3]);
  69. v = v << 4;
  70. v.truncate(2);
  71. assert_eq!(2, v.len());
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement