Как использовать макросы Rust в одном ящике?

У меня есть источники:

src/
  main.rs
  memory.rs
  chunk.rs

memory.rs

У меня есть макрос:

#[macro_export]
macro_rules! grow_capacity {
    ( $x:expr ) => {
        {
            if $x < 8 { 8 } else { $x * 2 }
        }
    };
}

chunk.rs

Хочу использовать:

use crate::memory;

// define struct Chunk

impl Chunk {
    pub fn write(&mut self, byte: u8) {
        // other lines of code.
        self.capacity = memory::grow_capacity!(self.capacity);
    }

Это дает мне ошибку:

error[E0433]: failed to resolve: could not find `grow_capacity` in `memory`
  --> src/chunk.rs:27:28
   |
27 |             self.capacity = memory::grow_capacity!(self.capacity);
   |                                     ^^^^^^^^^^^^^ could not find `grow_capacity` in `memory`

Чтобы сделать пост коротким, у меня есть полный код на Gist.

Если я помещу макрос внутрь chunk.rs, тогда я смогу его использовать. Я не думаю, как использовать макрос в файлах модуля? работает. Изменил ли Rust свою функцию? Я на Rust 1.44.1.

0 ответов

Другие вопросы по тегам