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?
7
A
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));
}
1
Float
è Trait, include implementazione, importa questo da applicare per f32 o f64.
use std::num::Float;
fn main() {
println!("{}", 1.0f64.sin());
}
E 'interessante (e un po' di confusione quando si arriva da uno sfondo C++/java) che non usi/import "math" ma "Float". – Kapichu
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
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