2012-03-17 57 views

回答

4

宏允许您使用完全不同的语法。虽然最简单的宏常常可以执行,但宏调用不必看起来像函数调用。另外,宏在运行时间之前的独立阶段执行。所以,如果你需要不同的语法,或者如果你想在运行时进行宏扩展,那么就使用一个宏。

一般来说,我会说,如果你可以用一个函数干净地做到这一点,然后使用一个函数。

+0

感谢丹非常明确的解释。但是我真正想知道的是,如果你没有创建新的语法,并且你没有在变量上创建副作用(例如通过引用模拟调用等),那么宏是否可以完成函数不能或做的更好? – 2012-03-17 21:39:15

+2

另一种看待它的方法:宏让你决定在编译时和运行时应该进行什么类型的计算。编译时计算通常处理语法问题。但是一些程序关键取决于编译时计算,比如类型化球拍等类型化语言的类型检查阶段。大多数程序员不需要进行重要的编译时计算,所以坚持使用普通的香草函数,除非你真的需要在编译时表达计算。 – dyoo 2012-03-18 22:30:50

4

Matthias Felleisen在他的Racket style guide有一个简短的讨论这个问题。

+0

谢谢萨姆。我注意到了他的简短评论,但我也注意到在他的风格指南结束时的待办事项列表中,他要求某人为该指南撰写关于该问题的整段内容,所以我认为这是一个比这些简短评论他的。 – 2012-03-19 19:22:50