WedX - журнал о программировании и компьютерных науках

Что такое вариант кортежа? (понимание сообщения об ошибке компилятора)

Используя wasm_bindgen с serde, я пытаюсь вернуть JsValue для сложной структуры, используя идиоматическую ржавчину. Я создал отдельный пример, чтобы проиллюстрировать ошибку, которую я вижу.

объявление структуры:

#[derive(Serialize)]
pub struct BookStoreData {
    pub h: HashMap<String, String>,
    pub name: String,
}

определение функции:

#[wasm_bindgen]
pub fn hello_hash(count: i32) -> Result<JsValue, JsValue> {
    set_panic_hook();
    let mut book_reviews = HashMap::new();

    book_reviews.insert(
        "Grimms' Fairy Tales".to_string(),
        "Masterpiece.".to_string(),
    );
    let data = BookStoreData {
        h: book_reviews,
        name: "My Book Store".to_string(),
    };

    let js_result: JsValue = JsValue::from_serde(&data).unwrap();

    OK(js_result)    

}

Я получаю эту ошибку компиляции:

error[E0425]: cannot find function `OK` in this scope
  --> src/hello_whatever.rs:46:5
   |
46 |     OK(js_result)    
   |     ^^ help: a tuple variant with a similar name exists: `Ok`

Вы можете увидеть полный пример на основе rust-parcel-template

Чтобы воспроизвести ошибку, из корня репозитория запустите npm run start или cd crate && cargo build.

22.04.2019

  • Используйте Ok вместо OK маленький k 22.04.2019
  • Не могу поверить, что я этого не видел. Справочное сообщение должно было быть полезным. Я просто продолжал перечитывать его и задаваться вопросом, как Ok может иметь несколько вариантов кортежа, и упустил разницу в использовании заглавных букв. Спасибо @sn99! 23.04.2019

Ответы:


1

ответ был предоставлен в качестве комментария. Ok пишется строчными буквами k, но это не объясняет смысла сообщения об ошибке.

Во-первых, вот рабочий код с одним небольшим изменением:

#[wasm_bindgen]
pub fn hello_hash(count: i32) -> Result<JsValue, JsValue> {
    set_panic_hook();
    let mut book_reviews = HashMap::new();

    book_reviews.insert(
        "Grimms' Fairy Tales".to_string(),
        "Masterpiece.".to_string(),
    );
    let data = BookStoreData {
        h: book_reviews,
        name: "My Book Store".to_string(),
    };

    let js_result: JsValue = JsValue::from_serde(&data).unwrap();

    Ok(js_result)    

}

Во-вторых, что такое вариант кортежа?

В этом контексте рассматриваемая строка может быть функцией или вариантом кортежа структуры или перечисления (через твит от дружелюбного Rustacean):

кортежи могут использоваться в структуре или перечислении:

struct S(usize); // tuple-like struct
enum E {
    T(usize), // tuple variatn
}

Подробнее читайте в записи блога: Что такое вариант кортежа?

Это конкретное запутанное сообщение об ошибке может быть улучшено в будущем. Сообщение в блоге и последующее обсуждение в Twitter привели к следующему сообщению об ошибке: https://github.com/rust-lang/rust/issues/65386

23.04.2019
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]