2016-05-18 2 views
4

Есть ли какой-либо признак, который указывает некоторые числовые функции? Я хотел бы использовать его для ограничивающих универсального типа, как этот гипотетического HasSQRT:Черта для числовой функциональности в Rust

fn some_generic_function<T>(input: &T) 
    where T: HasSQRT 
{ 
    // ... 
    input.sqrt() 
    // ... 
} 

ответ

4

Вы можете использовать num или num-traits ящиков и связал свой общий тип функции с num::Float, num::Integer или любым соответствующим чертом:

extern crate num; 

use num::Float; 

fn main() { 
    let f1: f32 = 2.0; 
    let f2: f64 = 3.0; 
    let i1: i32 = 3; 

    println!("{:?}", sqrt(f1)); 
    println!("{:?}", sqrt(f2)); 
    println!("{:?}", sqrt(i1)); // error 
} 

fn sqrt<T: Float>(input: T) -> T { 
    input.sqrt() 
} 
+1

Я не хочу добавлять зависимость от моего проекта, насколько могу, есть ли другой способ? –

+0

Я думаю об определении новой черты, которая может предоставить мне необходимую функциональность, но это один из моих последних вариантов. –

+9

@HosseinNoroozpour использует зависимости. Ржавчина отличается от многих других языков тем, что управление пакетами встроено и сильно охвачено. Канонический пример - это генерация случайных чисел, которая предоставляется в ящике, а не в стандартной библиотеке. – Shepmaster