2014-11-28 3 views
20

Документов бесполезны: http://web.mit.edu/rust-lang_v0.9/doc/std/num/fn.abs.htmlКак получить абсолютное значение в Rust?

Очевидно, что я могу видеть функцию прямо там, но у меня нет ни малейшего представления о том, как назвать его.

Edit:

Проблема заключается в том, что она не работу. :)

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

"Нерешенные Имя: Num :: абс"

Edit 2: запуск ночных со вчерашнего дня (11/26/2014); не знаю какую версию. Я не понимал, что эти документы настолько устарели. oO

Текущие документы, похоже, указывают на отсутствие такой функции?

+0

Мне по-прежнему нужно рвать ржавчину, но 'std :: num :: abs' выглядит как соответствующий вызов. – user2485710

+0

Да, вот что я и подумал. –

+0

и в чем проблема? покажите свой код. – user2485710

ответ

28

В настоящее время abs is a method on most number types.

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

Я не думаю, что это важно, вызываете ли вы метод-член или «глобальную» функцию 'abs', в любом случае необходимо вызвать соответствующую перегрузку. – user2485710

+0

@ user2485710: что значит «глобальная» функция 'abs'? Больше не существует такого. 'std :: num :: abs' не существует. –

+0

ну, http://play.rust-lang.org/ предлагает последнюю версию ржавчины, и она просто работает. – user2485710

1

Это потому, что вы, вероятно, не располагаете достаточной информацией о типе.

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)); 
} 

если вы хотите изменяемый вы просто должны добавить mut сразу после let

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

и вы получите x, и вы можете изменить значение x.

+0

Это строго типизированный язык. Переменная имеет всю информацию о типе, которую она может получить. –

+1

@ archer884 тип вывода не обязательно связан с тем, что язык «сильный» или «слабо» напечатан, правила игры касаются предоставления типа, который, как предполагается, является правильным типом, который вы хотите. – user2485710

+0

@ archer884 вы можете попробовать все 3 примера онлайн здесь http://play.rust-lang.org/ – user2485710

-1

Никогда не удалось сделать rustc признать abs в качестве функции. Я, наконец, пошел с:

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

могли бы начать этот путь с самого начала, я думаю, но я все еще пытаюсь узнать библиотеки. : |

+0

это больше похоже на проблему с вашей установкой, попробуйте скопировать рабочий и полный пример, вставьте его в онлайн-компилятор http://play.rust-lang.org/ и нажмите «поделиться» и разместите его здесь. – user2485710

+1

Прошу прощения, но это * * рабочий, полный пример. На самом деле, возможно, он использовал пару дней назад ответ Криса Моргана. :) –

Смежные вопросы