首页 > 解决方案 > Scala 函数和按名称调用的问题

问题描述

我正在尝试在此函数中循环使用按名称调用参数的第二个参数(exp)。前 3 个参数是索引、停止循环的布尔值和增量函数。当我尝试循环“hello world”10 次时,我得到一个带有 10 '()' 的输出,如测试代码中所示。我可以就这里的问题寻求帮助吗?谢谢

def forLoop(ival: => Int, f: (Int) => Boolean, g: (Int)=>Int)(exp: => Unit): Unit = {
  if(f(ival)==false) 
    return
  else {
    println(exp)
    forLoop(g(ival),f,g)(exp)
  }
}

def f(x: Int): Boolean = { x<10 }
def g(y: Int): Int = { y+1 }
val exp: Unit = "Hello World"
forLoop(0,f,g)("Hello World")

标签: scalacallbyname

解决方案


我认为这符合您的要求。

def forLoop(ival: => Int, f: =>Int => Boolean, g: =>Int=>Int
           )(exp: => Unit): Unit =
  if (f(ival)) {
    exp
    forLoop(g(ival),f,g)(exp)
  }

def f(x: Int): Boolean = x<10
def g(y: Int): Int = y+1
def exp: Unit = println("Hello World")
forLoop(0,f,g)(exp)

推荐阅读