Ответ 1
В настоящее время abs
- метод для большинства типов номеров.
let value = -42i32;
let x = value.abs();
Документы бесполезны: http://web.mit.edu/rust-lang_v0.9/doc/std/num/fn.abs.html
Очевидно, я вижу функцию прямо там, но у меня нет ни малейшего понятия, как ее называть.
Edit:
Проблема в том, что она не работает.:)
use std::num;
let x = num::abs(value);
"Неразрешенное имя: num:: abs"
Отредактируйте 2: работайте по ночам со вчерашнего дня (11/26/2014); не знаю какую версию. Я не понимал, что эти документы настолько устарели. оо
Текущие документы, похоже, указывают на отсутствие такой функции?
В настоящее время abs
- метод для большинства типов номеров.
let value = -42i32;
let x = value.abs();
Это потому, что вы, вероятно, не предоставляете достаточно информации о типе.
fn main() {
println!("Abs is \"{}\"",
std::num::abs(-42i));
}
обратите внимание на суффикс i
, который сообщает Rust, что -42
является целым числом.
Правило большого пальца состоит в том, что: вы должны указать, что ваш тип где-то, так или иначе, и суффикс удобен, например, другим способом это работает
fn main() {
let x = -42i;
println!("Abs is \"{}\"",
std::num::abs(x));
}
это тоже работает
fn main() {
let x: int = -42;
println!("Abs is \"{}\"",
std::num::abs(x));
}
если вы хотите изменить mutable, вам просто нужно добавить mut
сразу после let
fn main() {
let mut x: int = -42;
x += x;
println!("Abs is \"{}\"",
std::num::abs(x));
}
и вы получите x
, и вы можете изменить значение x
.
Никогда не удалось сделать rustc
распознать abs
как функцию. Я наконец пошел с:
let abs = if val < 0 {
abs * -1
} else {
abs
};
Возможно, начался этот путь, я думаю, но я все еще пытаюсь изучить библиотеки.: |
Ответ с упоминанием std::num::abs
больше не работает.
Вместо этого используйте:
i32::abs(n)