在Rust中,有什么方法可以处理运算符功能,例如add或sub?我需要获得这些功能的 reference ,但是我只能找到有关特征的信息。我将在这里对Python所需的内容(如包装方法)进行比较。
A = 1
B = 2
A.__add__(B)
#Or maybe do something more, like
C = int(1).__add__
C(2)
答案 0 :(得分:7)
您可以通过通用函数调用语法获得指向特定类型的trait方法的函数指针:
let fptr = <i32 as std::ops::Add>::add; // type: `fn(i32, i32) -> i32`
fptr(1, 3); // returns 4
更大的示例(Playground):
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