[Rust] Macros vs. Functions

In Rust, the exclamation mark (!) after a name indicates that it is a macro rather than a function. Macros and functions in Rust are called differently and serve different purposes. Macros, like anyhow!, can do things that functions cannot, such as generating code based on the input parameters at compile time, which is why they have a different syntax for invocation.

 

Macros vs. Functions

  • Macros (anyhow!): Macros perform operations at compile time before the final binary is produced. They can take a variable number of arguments, and their implementation can generate code based on those arguments. The ! is mandatory to invoke a macro and is part of its syntax. Without the !, Rust will not recognize it as a macro call and will instead look for a function or another item with the provided name, resulting in a compilation error if no such item exists.

  • Functions: Functions are called without an exclamation mark and perform operations at runtime. They have a fixed signature, meaning they take a specified number of arguments with defined types and return a specific type.

 

What Happens Without the !

If you try to use anyhow without the !, like this:

let error = anyhow("An error occurred");

Rust will attempt to find a function or another item named anyhow, not a macro. Since no such function exists in the anyhow crate (the main feature is the macro for creating errors), this will result in a compilation error.

 

Conclusion

Yes, without the !, calling the anyhow macro won't work because Rust's syntax requires the ! to identify and invoke macros. This syntax rule helps maintain clarity and distinction between macros and functions within Rust's ecosystem.

posted @   Zhentiw  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2023-02-15 [Typescript] Creating Chainable Method Abstractions with Generics and the Builder Pattern - 05
2021-02-15 [Node] Install packages correctly and avoid attacks
2020-02-15 【时间管理】猴子理论 ”monkey-on-the-back” Analogy
2020-02-15 【时间管理】GTD:Getting things done
2019-02-15 [Webpack] Create Separate webpack Configs for Development and Production with webpack-merge
2019-02-15 [Algorithm] Reverse array of Chars by word
2018-02-15 [Tools] Using mobile device for debugging your mobile web site
点击右上角即可分享
微信分享提示