• Как оптимизировать код в rust при помощи trait?

    zigenzoog
    @zigenzoog Автор вопроса
    Дмитрий Беляев, Благодарю за идею!
    Пришлось доки перечитывать по трейтам, многое узнал )))
    Ваша идея хороша, но действительно не очень гибкая.
    Написано
  • Как оптимизировать код в rust при помощи trait?

    zigenzoog
    @zigenzoog Автор вопроса
    Благодарю за помощь!
    Я уже понял, что, то что я задумал и как это должно выглядеть, не реализуемо, буду разбираться с вашим кодом.
    Написано
  • Как оптимизировать код в rust при помощи trait?

    zigenzoog
    @zigenzoog Автор вопроса
    0.3 - это значение по умолчанию (может быть любое число, как и остальные поля в стракте).
    Если быть точнее 0.3 это коэфициент обучения в нейросетях (персептроне).

    Я начал недавно учить раст, делая либу на простенькую нейронку, вот ссыль, пока не на рабочий код

    Идея такова: человек подключает либу и опционально выбирает f32 или f64.
    Не спрашивайте зачем, просто ставя такие задачи я постигаю нюансы языка )

    п.с.
    За наводку на Into или From, благодарю, в начале когда я пытался решить задачу я мучал Into/From, но тогда не догнал, ща еще раз проштудирую тему.
    Написано
  • Как оптимизировать код в rust при помощи trait?

    zigenzoog
    @zigenzoog Автор вопроса
    Как я и сказал, я новичок в расте, большого смысла в коде выше нет, я пытаюсь понять механику дженериков.

    Идея примерно такова:
    - Есть приложение (main) в котором подключается либа (mod float_trait и mod float_struct).
    - В мэйне создаем экземпляр FloatStruct, и опционально можно выбрать тип с которым будет работать эта либа f32 или f64.
    - И хотел бы ограничиться этим куском:
    impl<T: Float> FloatStruct<T> {
            pub fn new() -> Self {
                Self {
                    _a: 2,
                    _b: String::from("hi"),
                    c: 0.3,  // error[E0308]: mismatched types
                }
            }
        }

    а не это с повторяющимися конструкторами:
    impl FloatStruct<f32> {
            pub fn new() -> Self {
                Self {
                    _a: 2,
                    _b: String::from("hi"),
                    c: 0.3,
                }
            }
        }
    
        impl FloatStruct<f64> {
            pub fn new() -> Self {
                Self {
                    _a: 2,
                    _b: String::from("hi"),
                    c: 0.3,
                }
            }
        }


    Т.е. мэйн можно переписать так:
    fn main() {
        // Дать возможность выбора.
        // Опционально создать экземпляр объекта, который работает с f32
        let fs_32 = float_struct::FloatStruct::<f32>::new();
        // или f64
        let fs_64 = float_struct::FloatStruct::<f64>::new();
        println!("{:#?} {:#?}", fs_32.c, fs_64.c)
    }
    Написано
  • Как правильно делать тесты?

    zigenzoog
    @zigenzoog Автор вопроса
    Да, как раз тема покрытия 100% меня немного и напрягла )
  • Почему в результате выводятся различные адреса?

    zigenzoog
    @zigenzoog Автор вопроса
    Огромное спасибо!
    Вы подтвердили, то что я уже начал подозревать. :)
  • Почему в результате выводятся различные адреса?

    zigenzoog
    @zigenzoog Автор вопроса
    т. е. я правильно вас понял: `a` - это копия `t.array[i]` ?