Что делает BigUint::from(24u32)?

#rust #cryptography

Вопрос:

 BigUint::from(24u32)
 

Я понимаю, что это связано с большим целым числом без знака, поскольку оно является частью модуля криптографии для учета больших чисел. Я не понимаю, что делает эта часть from(24u32) .
Например, если он используется в этом контексте

 let b: BigUint = (BigUint::from(24u32) * amp;n).sqrt()   amp;one;
 

Ответ №1:

Преобразования между типами в Rust определяются From чертой , определяющей функцию from , которая Foo::from (bar) преобразует значение bar в тип Foo . В вашем случае вы, следовательно , преобразуетесь 24u32 в тип BigUint , но что это такое 24u32 ?

Целочисленные литералы в Rust могут использовать суффикс для указания их фактического типа. Если бы вы написали просто 24 , это могло бы быть , например, an i32 , a u8 или a u32 . Большую часть времени компилятор может определить фактический тип по тому, как используется значение, а когда это невозможно, по умолчанию i32 используется значение . Но в вашем случае это не сработает: нет BigUint::from<i32> , но есть функции преобразования для всех обычных типов без знака: u8 , u16 , u32 , u64 и u128 , поэтому компилятор не знает, какой из них использовать. Добавление u32 суффикса уточняет тип, так 24u32 же как и значение 24 с типом u32 , позволяя компилятору понять, что вы хотите BigUint::from<u32> (24) .

Ответ №2:

BigUint Структура реализует <a rel=»noreferrer noopener nofollow» href=»https://docs.rs/num-bigint/0.4.0/num_bigint/struct.BigUint.html#impl-From» rel=»nofollow noreferrer»> From<u32> признак, что означает, что она будет реализовывать from(u32) функцию.

Реализации From<_> признака используются для выполнения преобразования значений, которое будет потреблять исходные входные данные. В вашем примере BigUint структура строится из 24u32 числа.