【问题标题】:Partially applied recursive functions部分应用的递归函数
【发布时间】:2010-07-06 00:02:30
【问题描述】:
def mainCaller() = { 
  val name = "xyz"
  someList.foreach { u:Map => foo(name, u) }
}

def foo(name:String)(map:Map): Unit = {
  //match case....
  //recursive call to foo in each case where name remains same, but map changes
}

如何将 foo 编写为部分应用的函数,我不必在每次递归调用中都传递名称而只需调用 foo(map1)

【问题讨论】:

    标签: scala recursion partial-application


    【解决方案1】:

    两种选择:

    def foo(name:String)(map:Map): Unit = {
        val bar = foo(name)_
        //match case...
        // case 1:
        bar(x)
    
        // case 2:
        bar(y)
    }
    

    或者:

    def foo(name:String): Map => Unit = {
        def bar(map: Map): Unit = {
            //match case...
            // case 1:
            bar(x)
    
            // case 2:
            bar(y)
        }
        bar
    }
    

    【讨论】:

    • 简直太棒了!!两者有什么优缺点。第一种方法看起来更干净。
    • @scout:我想不出任何(不利)优势。顺便说一句,我犯了一个错误。在第一个示例中,foo(name) 后面需要一个下划线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    相关资源
    最近更新 更多