2015-01-18 20 views
7

Domanda semplice: dove è sin()? Ho cercato e trovato solo nei documenti di Rust che ci sono tratti come std::num::Float che richiedono sin, ma nessuna implementazione .Dov'è la funzione seno?

risposta

11

Il Float tratto è stato rimosso, e le implementazioni metodi sono intrinseci sui tipi ora. Questo significa che c'è un po 'meno a digitare per accedere alle funzioni matematiche:

fn main() { 
    let val: f32 = 3.14159; 
    println!("{}", val.sin()); 
} 

Tuttavia, è ambiguo se 3.14159.sin() si riferisce ad un numero a 32 o 64 bit, quindi è necessario specificare in modo esplicito. Sopra, ho impostato il tipo della variabile, ma è anche possibile utilizzare un tipo di suffisso:

fn main() { 
    println!("{}", 3.14159f64.sin()); 
} 

È inoltre possibile utilizzare unambigous sintassi della funzione di chiamata:

fn main() { 
    println!("{}", f32::sin(3.14159)); 
} 
+0

E 'interessante (e un po' di confusione quando si arriva da uno sfondo C++/java) che non usi/import "math" ma "Float". – Kapichu

+1

Non funziona. Al primo esempio, ricevo 'error: type _ non implementa alcun metodo in scope denominato sin', sul secondo esempio, ottengo' error: nome non risolto Float :: sin'. $ rustc --version outputs 'rustc 0.13.0-nightly (96a3c7c6a 2014-12-23 22:21:10 +0000)' – Kapichu

+1

Dovrai eseguire l'aggiornamento alla versione più recente di Rust. In preparazione per la versione 1.0, c'è un sacco di lavoro in corso! In questo caso particolare, i letterali in virgola mobile sono ora predefiniti al tipo 'f64' ([Relevant RFC] (https://github.com/rust-lang/rfcs/blob/master/text/0212-restore-int-fallback. md)). Se vuoi farlo funzionare, senza eseguire l'aggiornamento, prova a '3.14f64.sin()'. – Shepmaster

1

Float è Trait, include implementazione, importa questo da applicare per f32 o f64.

use std::num::Float; 

fn main() { 
    println!("{}", 1.0f64.sin()); 
}