是否有必要“缓存”currying函数的部分函数?

时间:2012-09-13 17:03:36

标签: f# closures

例如,如果我将F x y定义为currying函数,并且在环境中使用了部分函数(F x),那么我应该let binding将它作为一个命名函数性能? (比较缓存property的{​​{1}},因为通常无需缓存object,例如property

Array.Length

v.s。

 let Gofrom (board: int[][]) (color: int) (reelID, reelPosition) (direction: Direction) =
    let rec walkfrom x =
        match direction.Target x with
        | (a, _ | _, a) when a = -1 || a = board.Length -> x
        | a, b when board.[a].[b]= color -> walkfrom (a, b)
        | _ -> x
    walkfrom (reelID, reelPosition)

1 个答案:

答案 0 :(得分:3)

性能应该没有区别,但我肯定会使用第一种形式,因为它清楚地表明哪些args在调用之间没有变化。

顺便说一句,这并不是关于currying,因为你将代码重构为一个单独的函数(闭包)以避免传递args。