2015-03-17

немного за rust

  1. Получил прекрасное сообщение об ошибке:
     error: mismatched types:
     expected `&fn(i32, i32) -> i32 {foo::plus}`,
        found `&fn(i32, i32) -> i32 {foo::minus}`
    
     let v: &[&Fn(i32, i32) -> i32] = [&plus, &minus];
    
    На самом деле, там проблема в другом месте -- массив не приведен к срезу ( забыл & перед [), что видно из след. сообщения об ошибке. 
  2. Из примера использования биндингов к Qt
    QString::new7("Cannot load %1.").arg12(&fileName, 0, &QChar::new9(' ' as i8))
    Разные версии функций Qt, отличающиеся типов аргуменов, при генерации биндингов получили индексы. Перегрузка функции по типу аргументов не то чтобы невозможна, но требует некоторой работы -- нужен параметризируемый (generic) трейт ("интерфейс",  аналог class из Хаскеля или protocol из Свифта):
    trait Overload<X> {
     fn call_with(self, arg: X) -> ();
    }
    
    struct Foo;
    
    impl Overload<u8> for Foo {
     fn call_with(self, arg: u8) {  }
    }
    
    impl Overload<i32> for Foo {
     fn call_with(self, arg: i32) {  }
    }
    
    

Комментариев нет:

Отправить комментарий