@@ -319,6 +319,37 @@ sub_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
319
319
/// Foo * Foo;
320
320
/// }
321
321
/// ```
322
+ ///
323
+ /// Note that `RHS = Self` by default, but this is not mandatory. Here is an
324
+ /// implementation which enables multiplication of vectors by scalars, as is
325
+ /// done in linear algebra.
326
+ ///
327
+ /// ```
328
+ /// use std::ops::Mul;
329
+ ///
330
+ /// struct Scalar {value: usize};
331
+ ///
332
+ /// #[derive(Debug)]
333
+ /// struct Vector {value: Vec<usize>};
334
+ ///
335
+ /// impl Mul<Vector> for Scalar {
336
+ /// type Output = Vector;
337
+ ///
338
+ /// fn mul(self, rhs: Vector) -> Vector {
339
+ /// Vector {value: rhs.value.iter().map(|v| self.value * v).collect()}
340
+ /// }
341
+ /// }
342
+ ///
343
+ /// impl PartialEq<Vector> for Vector {
344
+ /// fn eq(&self, other: &Self) -> bool {
345
+ /// self.value == other.value
346
+ /// }
347
+ /// }
348
+ ///
349
+ /// let scalar = Scalar{value: 3};
350
+ /// let vector = Vector{value: vec![2, 4, 6]};
351
+ /// assert_eq!(scalar * vector, Vector{value: vec![6, 12, 18]});
352
+ /// ```
322
353
#[ lang = "mul" ]
323
354
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
324
355
pub trait Mul < RHS =Self > {
@@ -373,6 +404,37 @@ mul_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
373
404
/// Foo / Foo;
374
405
/// }
375
406
/// ```
407
+ ///
408
+ /// Note that `RHS = Self` by default, but this is not mandatory. Here is an
409
+ /// implementation which enables division of vectors by scalars, as is done in
410
+ /// linear algebra.
411
+ ///
412
+ /// ```
413
+ /// use std::ops::Div;
414
+ ///
415
+ /// struct Scalar {value: f32};
416
+ ///
417
+ /// #[derive(Debug)]
418
+ /// struct Vector {value: Vec<f32>};
419
+ ///
420
+ /// impl Div<Scalar> for Vector {
421
+ /// type Output = Vector;
422
+ ///
423
+ /// fn div(self, rhs: Scalar) -> Vector {
424
+ /// Vector {value: self.value.iter().map(|v| v / rhs.value).collect()}
425
+ /// }
426
+ /// }
427
+ ///
428
+ /// impl PartialEq<Vector> for Vector {
429
+ /// fn eq(&self, other: &Self) -> bool {
430
+ /// self.value == other.value
431
+ /// }
432
+ /// }
433
+ ///
434
+ /// let scalar = Scalar{value: 2f32};
435
+ /// let vector = Vector{value: vec![2f32, 4f32, 6f32]};
436
+ /// assert_eq!(vector / scalar, Vector{value: vec![1f32, 2f32, 3f32]});
437
+ /// ```
376
438
#[ lang = "div" ]
377
439
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
378
440
pub trait Div < RHS =Self > {
0 commit comments