小编myQ*_*yQs的帖子

在Scala中调用带有和不带括号的无参数函数以不同的方式执行

我有以下Currying函数声明:

def logString(count: Int)(fun:() => Unit) {
  for (n <- 1 to count) { fun }
}
Run Code Online (Sandbox Code Playgroud)

我用这种方式调用这个函数:

logString(3) { () => print("I") }
Run Code Online (Sandbox Code Playgroud)

结果没什么 - 只是没有输出.

然后我只需在"fun"函数调用后添加括号,在Currying函数声明体内:

def logString(count: Int)(fun:() => Unit) {
  for (n <- 1 to count) { fun() }
}
Run Code Online (Sandbox Code Playgroud)

结果成为预期的结果:

III

这是一些Scala错误,还是在学习Scala时我错过了一些规则?

我知道当你声明这样的函数时有规则:def myFun = 1我们不能用括号调用它 - 编译失败. 但是在调用带括号和不带括号的函数时有不同的结果似乎更像是一个bug.

我是对的还是我想念Scala?

scala currying

4
推荐指数
2
解决办法
752
查看次数

标签 统计

currying ×1

scala ×1