以结尾的方法*
往往有什么共同点?我见过一些,但不知道这是否是一个既定的命名约定。
问问题
161 次
2 回答
2
一般来说,我已经看到这用于区分执行相同操作但具有不同签名的函数,特别是在重载会产生语义冲突的情况下。例如,list*
不能表示为的重载,list
因为它们以不同的方式使用可变参数。
在许多情况下(但不是全部),*
表单由非*
版本调用。
于 2013-04-16T20:05:52.850 回答
2
除了其他答案提到的内容外,此约定用于非 * 版本是宏并且这些宏发出调用 * 函数的代码的情况。即使在clojure.core
,let
和中,fn
也是其结果代码分别调用let*
和fn*
函数的宏。其他示例是sqlkorma,其中非 * (where
,delete
等update
)是宏, * (where*
等delete*
)是函数。
使用这种模式的原因是在某些情况下使用宏版本的 API 是不可行的(除了使用 eval,因为你在编译时没有信息),在这种情况下你可以使用 *基于函数。
于 2013-04-17T04:23:23.767 回答