引用基本运算符功能

时间:2019-01-24 01:03:05

标签: rust

在Rust中,有什么方法可以处理运算符功能,例如add或sub?我需要获得这些功能的 reference ,但是我只能找到有关特征的信息。我将在这里对Python所需的内容(如包装方法)进行比较。

A = 1
B = 2
A.__add__(B)

#Or maybe do something more, like
C = int(1).__add__
C(2)

1 个答案:

答案 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