Если вы cargo expand
свой код, вы поймете, что расширились до этого:
(предположим, struct_name
равно Foo
)
impl Foo {
fn useless() -> &'static str {
concat!(stringify!(name), stringify!(another_name))
}
}
stringify!
преобразует идентификатор непосредственно в строку, поэтому возвращаемое значение эквивалентно
concat!("name", "another_name")
Здесь запятая является разделителем для синтаксиса, а не строковым литералом, поэтому вы получите nameanother_name
.
Принимая во внимание только ваш код, приведенный выше, наиболее удобным исправлением является формулирование необработанной строки внутри кода proc_macro вместо использования stringify!
и concat!
, что позволяет использовать API, такие как slice::join
.