2014-11-28 11 views
20

Docs są bezużyteczne: http://web.mit.edu/rust-lang_v0.9/doc/std/num/fn.abs.htmlJak uzyskać wartość absolutną w Rust?

Oczywiście, widzę funkcji właśnie tam, ale nie mam pojęcia, jak to nazwać.

Edit:

Problemem jest to, że nie pracy. :)

use std::num; 
let x = num::abs(value); 

"Nierozwiązane nazwa: num :: abs"

Edit 2: bieganie nocne od wczoraj (26.11.2014); nie wiem jakiej wersji. Nie zdawałem sobie sprawy, że ci doktorzy byli tak nieaktualni. oO

Obecne dokumenty wydają się wskazywać na brak takiej funkcji?

+0

Nadal muszę dostać się do rdzy, ale 'std :: num :: abs' wygląda jak odpowiednie wezwanie. – user2485710

+0

Tak, to też myślałem. –

+0

i na czym polega problem? pokaż swój kod. – user2485710

Odpowiedz

28

W dzisiejszych czasach, abs is a method on most number types.

let value = -42i32; 
let x = value.abs(); 
+0

Nie sądzę, aby miało to znaczenie, czy wywołujecie metodę member lub funkcję "global" 'abs', tak czy inaczej należy wywołać odpowiednie przeciążenie. – user2485710

+0

@ user2485710: co rozumiesz jako "globalną" funkcję "abs"? Nie ma już czegoś takiego. 'std :: num :: abs' nie istnieje. –

+0

cóż, http://play.rust-lang.org/ oferuje najnowszą wersję rdzy i po prostu działa. – user2485710

1

Dzieje się tak, ponieważ prawdopodobnie nie podajesz wystarczającej ilości informacji o typie.

fn main() { 
    println!("Abs is \"{}\"", 
       std::num::abs(-42i)); 
} 

Zawiadomienie i przyrostek, który mówi na rdzę że -42 jest liczbą całkowitą.

Reguła kciuka jest, że: trzeba określić, jaki jest twój typ to gdzieś, jakoś i przyrostek są przydatne, na przykład inny sposób ten działa jest

fn main() { 
    let x = -42i; 
    println!("Abs is \"{}\"", 
       std::num::abs(x)); 
} 

to działa zbyt

fn main() { 
    let x: int = -42; 
    println!("Abs is \"{}\"", 
       std::num::abs(x)); 
} 

jeśli chcesz zmienny po prostu trzeba dodać mut zaraz po let

fn main() { 
    let mut x: int = -42; 
    x += x; 
    println!("Abs is \"{}\"", 
       std::num::abs(x)); 
} 

, a otrzymasz x i możesz zmienić wartość x.

+0

Jest to język mocno napisany. Zmienna zawiera wszystkie informacje o typie, jakie może uzyskać. –

+1

@ Wnioskowanie typu archer884 niekoniecznie wiąże się z faktem, że język jest "silny" lub "słabo" wpisany, zasady gry polegają tylko na zapewnieniu typu, który ma być właściwym typem. – user2485710

+0

@ archer884 możesz wypróbować wszystkie 3 przykłady online tutaj http://play.rust-lang.org/ – user2485710

-1

Nigdy nie udało się, aby rustc rozpoznać abs jako funkcję. W końcu poszedłem z:

let abs = if val < 0 { 
    abs * -1 
} else { 
    abs 
}; 

Mogłem zacząć od początku, jak sądzę, ale wciąż próbuję uczyć się bibliotek. : |

+0

To brzmi bardziej jak problem z twoją instalacją, spróbuj zakodować roboczy i kompletny przykład, wklej go na internetowy kompilator http://play.rust-lang.org/ i kliknij "udostępnij" i opublikuj tutaj. – user2485710

+1

Przepraszam, bracie, ale to * jest * działającym, kompletnym przykładem. Naprawdę mogłem użyć odpowiedzi Chrisa Morgana kilka dni temu. :) –

Powiązane problemy