在Rust中,有没有办法处理运算符函数,如add或sub?我需要获得这些函数的参考,但我只能找到特征.我将在这里留下我在Python中需要的比较(如包装器方法).
A = 1
B = 2
A.__add__(B)
#Or maybe do something more, like
C = int(1).__add__
C(2)
Run Code Online (Sandbox Code Playgroud)
您可以通过通用函数调用语法获取指向特定类型的特征方法的函数指针:
let fptr = <i32 as std::ops::Add>::add; // type: `fn(i32, i32) -> i32`
fptr(1, 3); // returns 4
Run Code Online (Sandbox Code Playgroud)
更大的例子(游乐场):
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
}
Run Code Online (Sandbox Code Playgroud)
你的int(1).__add__例子有点复杂,因为我们在这里有一个部分应用的函数.Rust没有内置到语言中,但您可以轻松使用闭包来实现相同的效果:
let op = |b| 1 + b;
op(4); // returns 5
Run Code Online (Sandbox Code Playgroud)