我有一个函数f: (a, b, c = 5, d = 0) -> {...}
,它需要2到4个参数。
我想传递此函数的“绑定”版本,该版本始终使用最后一个参数的默认值,但对前两个参数使用特定值(比如1和2)。也就是说,我想要g: () -> f(1, 2)
。
如果我要进行部分申请,我会得到g': (c = 5, d = 0) -> f(1, 2, c, d)
。也就是说,部分应用程序不会强制执行我想要的g
的零参数性质,而是给我g'
,其中包含0到2个参数。
从g
调用f
获取{{1}}的技巧是什么?
答案 0 :(得分:2)
发表我的评论作为答案:似乎这个问题与函数式编程或currying或部分应用程序几乎没有关系,而是正是关于采用一个带有默认值的可选参数的函数,并创建一个新函数没有可修改默认参数的可选参数。
调用此概念转换T
。假设由于某种原因,部分应用程序意味着可选参数仍然是可选的(不需要是通用的,但是再一次,熟悉的函数式编程语言--Haskell等 - 甚至都没有可选参数),至少有两种方法可以从g
获得f
。
f: (a, b, c = 5, d = 0) -> {....}
,需要2到4个参数。T(f) : (a,b) -> {...}
,它只需要2个参数。也就是T(f)(a,b) = f(a,b) = f(a,b,5,0)
。g
。也就是g() = T(f)(1,2) = f(1,2) = f(1,2,5,0)
。f: (a, b, c = 5, d = 0) -> {....}
,需要2到4个参数。f
上部分应用将前两个参数修改为1和2,然后调用生成的函数g'
。也就是g' : (c=5, d=0) -> f(1, 2, c, d)
。它需要0到2个参数。T(g) : () -> {....}
,该函数只取0个参数。也就是T(g)() = g'() = g'(5, 0) = f(1, 2, 5, 0)
。无论如何,问题中的窘境似乎取决于T
,而不是函数式编程或currying或部分应用的任何方面。我不知道T
是否有足够的要点来获得标准名称,但是像“修复/绑定默认参数”这样的东西应该没问题。