有人可以给出一些关于何时使用Scheme或球拍宏的通用指南以及何时使用函数。在计划或球拍何时使用功能和什么时候使用宏
如果你没有创建新的语法,并且你没有在变量上创建副作用,那么你会不得不(或者更合适)使用宏而不是函数?
有人可以给出一些关于何时使用Scheme或球拍宏的通用指南以及何时使用函数。在计划或球拍何时使用功能和什么时候使用宏
如果你没有创建新的语法,并且你没有在变量上创建副作用,那么你会不得不(或者更合适)使用宏而不是函数?
宏允许您使用完全不同的语法。虽然最简单的宏常常可以执行,但宏调用不必看起来像函数调用。另外,宏在运行时间之前的独立阶段执行。所以,如果你需要不同的语法,或者如果你想在运行时进行宏扩展,那么就使用一个宏。
一般来说,我会说,如果你可以用一个函数干净地做到这一点,然后使用一个函数。
Matthias Felleisen在他的Racket style guide有一个简短的讨论这个问题。
谢谢萨姆。我注意到了他的简短评论,但我也注意到在他的风格指南结束时的待办事项列表中,他要求某人为该指南撰写关于该问题的整段内容,所以我认为这是一个比这些简短评论他的。 – 2012-03-19 19:22:50
感谢丹非常明确的解释。但是我真正想知道的是,如果你没有创建新的语法,并且你没有在变量上创建副作用(例如通过引用模拟调用等),那么宏是否可以完成函数不能或做的更好? – 2012-03-17 21:39:15
另一种看待它的方法:宏让你决定在编译时和运行时应该进行什么类型的计算。编译时计算通常处理语法问题。但是一些程序关键取决于编译时计算,比如类型化球拍等类型化语言的类型检查阶段。大多数程序员不需要进行重要的编译时计算,所以坚持使用普通的香草函数,除非你真的需要在编译时表达计算。 – dyoo 2012-03-18 22:30:50