Squeak.ru - шаблоны программирования

Добавить функцию в уже существующую структуру

Я хочу добавить свою собственную функцию в уже существующую структуру, которую я не могу контролировать. В качестве конкретного примера я хочу создать экземпляр std::fs::File

let logfile = std::fs::OpenOptions::new().create(true).open("file.txt").unwrap();

Затем я хочу как-то создать свою собственную функцию fn foo(), чтобы потом я мог делать logfile.foo();

Я не уверен, что это вообще возможно, если честно.

24.12.2020

  • Есть ли в вашем экземпляре особая информация, на которую опирается foo, или вся информация уже содержится в экземпляре File? Если вся информация уже находится в экземпляре File, то вы можете просто создать трейт с помощью метода foo, а затем реализовать его для File. 24.12.2020

Ответы:


1

Это именно то, для чего можно использовать черты. См. Трейты: определение общего поведения в Rust Book.

Короче говоря, вы можете определить свой собственный trait Foo и добавить, например. к нему метод fn foo(&self), а затем impl Foo for std::fs::File, что позволяет вызывать logfile.foo().

trait Foo {
    fn foo(&self);
}

impl Foo for File {
    fn foo(&self) {
        println!("foo");
    }
}

Также в вашем OpenOptions отсутствует вызов write() или append(). В противном случае вы получите сообщение InvalidInput. ошибка.

Вот полный пример:

use std::fs::{File, OpenOptions};

trait Foo {
    fn foo(&self);
}

impl Foo for File {
    fn foo(&self) {
        println!("foo");
    }
}

fn main() {
    let logfile = OpenOptions::new()
        .write(true) // or `.append(true)`
        .create(true)
        .open("file.txt")
        .unwrap();

    logfile.foo();
}
24.12.2020
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...