매크로에 전달되는 메서드 집합을 제공하는 struct
을 생성하는 매크로를 만들려고합니다. 예를 들어, 전화 :매크로에 전달 된 항목 arg를 메소드로 사용할 수 있습니까?
create_impl!(StructName, fn foo() -> u32 { return 432 })
빈 구조체 방법 foo()
을 제공 StructName
을 생성해야합니다.
내 첫 시도는 item
매크로 유형을 사용합니다. 나는 시도하고 규칙에 item
를 사용할 때, 나는 다음과 같은 컴파일러 오류 얻을 :
error: expected one of `const`, `default`, `extern`, `fn`, `pub`, `type`, `unsafe`, or `}`, found `fn foo() -> u32 { return 42; }`
--> src/lib.rs:40:13
|
40 | $($function)*
| ^^^^^^^^^
그것이 생성 된 구조체에이 방법을 방법을 정의하는 item
인수를 사용할 수 있습니까? 내가 빠진 것이 있습니까?
macro_rules! create_impl {
($struct_name:ident, $($function:item),*) => {
struct $struct_name {
}
impl $struct_name {
// This is the part that fails.
$($function)*
}
};
}
* 방법 *은 전혀 항목이 아니라고 생각합니다.'fn foo()'를'fn foo (self)'로 변경하면 * 오류가 발생합니다 :'::'또는':'중 하나가 발견되면')'* (외부에 쓰면 같은 오류가 발생합니다 매크로). –