Какое значение __impl в шаблоне макроса? - PullRequest
0 голосов
/ 01 июня 2018

В следующем примере, взятом из nom, строка __impl появляется в первом шаблоне.Что это за элемент с точки зрения формального синтаксиса и почему он существует?

У меня сложилось впечатление, что литерал __impl в шаблоне и последующих вызовах используется в качестве фиктивной строки во время шаблона.соответствие, чтобы отделить внутренние используемые шаблоны от общедоступных.Однако «внутренняя» спичечная рука также скрыта от rustdoc.Имеет ли __impl -часть большее значение для Rust?

#[macro_export]
macro_rules! map(
  // Internal parser, do not use directly
  (__impl $i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => (
    ...
  );
  ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => (
    map!(__impl $i, $submac!($($args)*), $g);
  );
  ($i:expr, $f:expr, $g:expr) => (
    map!(__impl $i, call!($f), $g);
  );
);

1 Ответ

0 голосов
/ 01 июня 2018

У меня сложилось впечатление, что литерал __impl в шаблоне и последующих вызовах используется в качестве фиктивной строки при сопоставлении с образцом, чтобы отделить внутренние используемые шаблоны от общедоступных.

Это правильно.Это внутренняя деталь реализации, которую пользователи не должны знать или использовать.Однако макросы должны быть общедоступными, потому что они в конечном итоге расширяются «пользователем» на сайте использования.

Однако «внутренняя» ветвь сопоставления также скрыта от rustdoc.

Я не знаю, что вы имеете в виду, эта рука есть в документации :

__impl in docs

См. Также:

Является ли __impl -частьюесть еще какое-то значение для Rust?

Нет.Много раз вы увидите, что этот шаблон дополняется другим маловероятным символом, таким как @ или ~.

...