Tôi rất thích để có thể giống như sau:Có thể viết macro Rust sẽ mở rộng thành chữ ký hàm/phương thức không?
macro_rules! impl_a_method(
($obj:ident, $body:block) => (
fn a_method(foo: Foo, bar: Bar, baz: Baz) -> $obj $body
)
)
// Implementation would look like:
impl_a_method!(MyType, {
MyType {
foo: foo.blah(),
bar: bar.bloo(),
baz: baz.floozy(),
}
})
ví dụ thực tế của tôi tính năng các phương pháp có chữ ký lớn hơn nhiều mà tôi phải thực hiện theo những cách độc đáo cho 30 + các loại khác nhau.
Tôi đã thử một cái gì đó tương tự như vĩ mô trên, tuy nhiên tôi chạy vào lỗi nơi rustc coi foo
, bar
và baz
tên chưa được giải quyết tại địa điểm mở rộng (mặc dù tôi chắc chắn rằng việc kê khai vĩ mô lexically trước việc sử dụng).
Có thể làm điều gì đó như thế này không?
Nếu không, bạn có thể đề xuất phương pháp tiếp cận sẽ đạt được điều gì đó tương tự không?
Câu trả lời hay, chỉ cần nói rằng tôi không phải là người hâm mộ cách Rust làm macro. Toàn bộ các điểm của macro là chúng thay thế một cách mù quáng văn bản và "vệ sinh vĩ mô" là một oxymoron. Nó chỉ làm cho tôi phải đối phó với cách cú pháp hơn, trong khi tôi không gặp khó khăn đôi khi làm những công cụ nguy hiểm như thế này trong C. – sudo
"vệ sinh vĩ mô" thực sự là một ý tưởng khá được xác định rõ ràng: https://en.wikipedia.org/wiki/Hygienic_macro – solidsnack