Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高阶函数的Clojure类型提示_Clojure - Fatal编程技术网

高阶函数的Clojure类型提示

高阶函数的Clojure类型提示,clojure,Clojure,我正在创建一个小应用程序来学习Clojure,我刚刚为我的代码启用了反射警告功能,我发现了许多可以添加类型提示以丰富代码并提高性能的地方 然而,我在代码中的一些地方得到了警告,我使用了高阶函数或简短的匿名语法符号,我不知道如何在不扩展函数定义的情况下修复这些情况 例如,考虑下面的代码: (定义测试java费用) (测试“测试费用” (让[总分(map(memfn金额)费用)] (is(=7406(适用+总分()()()))) 其中,费用是一个向量,包含名为费用的某种类型/类别的对象 似乎投诉是

我正在创建一个小应用程序来学习Clojure,我刚刚为我的代码启用了反射警告功能,我发现了许多可以添加类型提示以丰富代码并提高性能的地方

然而,我在代码中的一些地方得到了警告,我使用了高阶函数或简短的匿名语法符号,我不知道如何在不扩展函数定义的情况下修复这些情况

例如,考虑下面的代码:

(定义测试java费用)
(测试“测试费用”
(让[总分(map(memfn金额)费用)]
(is(=7406(适用+总分()()())))
其中,
费用
是一个向量,包含名为
费用
的某种类型/类别的对象

似乎投诉是关于
amountancents
,Clojure正在对传递的参数进行反思以确定其类型(即
费用

我可以通过更改
(memfn amountments)
来修复警告(fn[^e](.amountments e)),但这只会使我的代码更难阅读,在我看来也不那么优雅

如果我有类似的问题:
#(.amountancents%)
使用匿名函数声明的特殊语法

我还考虑使用一个带注释的函数来创建费用对象,该对象的返回类型被标记为其类型,希望稍后可以推断出该类型,如下所示

(定义新费用^expense[日期字符串美元美分类别商户名称]
(费用.日期字符串美元美分类别商户名称))
然后创建我的开支,做:

(定义费用[(新费用“2009-8-24”44 95”书籍“amazon.com”)
(新费用“2009-8-25”29 11“天然气”“壳牌”))
但这也不起作用;编译器仍然无法推断所讨论的向量是
费用
对象的向量


有没有办法解决上面使用
#()
或将函数作为参数传递给高阶函数(例如
memfn
)的情况下的反射警告?我的意思是,一种不必自己扩展函数声明的方法(例如,
(fn[^Type n]..)
您是否只需要向
memfn
调用添加类型提示

从(其中
memfn
被描述为
(memfn name&args)
):

名称
可以是带有方法接收者名称提示的类型 键入以避免反射呼叫

因此,在您的情况下,您可以使用:

(memfn ^Expense amountInCents)

避免反射。

这将教会我如何使用RTFM。这正是我想要的。