Как реализовать заимствование / копирование для перечислений в ржавчине - PullRequest
0 голосов
/ 06 февраля 2020

Я создаю игрушечный язык программирования с использованием ржавчины на https://github.com/ayushashi11/lang. В моем проекте в файле src / executor.rs в строке 12 компилятор говорит:

use of moved value: `self.prog` 
move occured because self has type executor::Executor which doesn't implement the `Copy` trait.

Я не могу использовать признак копирования в Executor, поскольку его свойство prog имеет тип token :: Stmt, который не реализует copy черта. Я не могу реализовать свойство копирования в Stmt, потому что у него есть свойство с типом данных String, которое не реализует свойство копирования. Я пытался реализовать черту заимствования, используя производную, но он говорит, что не может найти макрос для черты заимствования.

Мой вопрос заключается в том, как мне реализовать черту заимствования / копирования для перечисления?

Я использую rust-nightly-1.42.0 для i686- windows -p c с GNU-toolchain

1 Ответ

0 голосов
/ 06 февраля 2020

Вы не можете взять копию строки, но вы можете вызвать .clone() для объекта, который ее содержит. Это решит проблему, но потенциально может быть дорогостоящим в памяти, поскольку теперь у вас есть две копии одного и того же. Другой подход заключается в использовании интеллектуального типа указателя, например Rc, для его переноса. Таким образом, когда вы клонируете его, он будет просто увеличивать счетчик ссылок интеллектуального указателя, а не клонировать весь объект.

https://doc.rust-lang.org/book/ch15-00-smart-pointers.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...