Вы можете получить указатель функции на метод черты определенного типа через универсальный синтаксис вызова функции :
let fptr = <i32 as std::ops::Add>::add; // type: `fn(i32, i32) -> i32`
fptr(1, 3); // returns 4
Большой пример ( Детская площадка ):
use std::ops;
fn calc(a: i32, b: i32, op: fn(i32, i32) -> i32) -> i32 {
op(a, b)
}
fn main() {
println!("{}", calc(2, 5, <i32 as ops::Add>::add)); // prints 7
println!("{}", calc(2, 5, <i32 as ops::Sub>::sub)); // prints -3
println!("{}", calc(2, 5, <i32 as ops::Mul>::mul)); // prints 10
}
Ваш пример int(1).__add__
немного сложнее, потому что у нас есть частично примененная функция. В Rust это не встроено в язык, но вы можете легко использовать замыкания для достижения того же эффекта:
let op = |b| 1 + b;
op(4); // returns 5