#1。忽略 Curry 的第二个参数并硬编码换行符
试试这个,cat
通过在匿名函数中硬编码最后一个参数。它实际上并没有Curry
在第一个之后使用参数:
catnip <- Curry(function(...) cat(..., "\n") )
#2。通过柯里化匿名函数来制造函数
这是第二个解决方案,它cat
通过使用对 的参数重新排序的匿名函数来处理最后一个cat
参数。
catnip2 <- Curry(function(last.arg, ...) cat(..., last.arg), "\n")
# test
catnip2("hi", "there")
#3。通过对更基本的函数进行柯里化来制造所需的函数
也许所有这一切的真正意义在于看看我们如何获取基本组件并将它们库里来获得我们想要的东西。因此我们可以定义一个泛型last.arg.fun
,然后通过对它的 curry 来制造所需的功能:
last.arg.fun <- function(FUN, last.arg, ...) FUN(..., last.arg)
catnip3 <- Curry(last.arg.fun, cat, "\n")
# test
last.arg.fun(cat, "\n", "hi", "there")
# test
catnip3("hi", "there")
last.arg.cat
如果在某个时候需要,我们可以分两步完成:
last.arg.cat <- Curry(last.arg.fun, cat)
catnip4 <- Curry(last.arg.cat, "\n")
# test
last.arg.cat("\n", "hi", "there")
# test
catnip4("hi", "there")
请注意,每个测试都应该产生一行,说 hi there 以换行符结尾。
编辑:更多解决方案。