加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:22:45 所属栏目:安全 来源:网络整理
导读:我有以下Currying函数声明: def logString(count: Int)(fun:() = Unit) { for (n - 1 to count) { fun }} 我用这种方式调用这个函数: logString(3) { () = print("I") } 结果没什么 – 只是没有输出. 然后我只需在“fun”函数调用后添加括号,在Currying函
我有以下Currying函数声明:

def logString(count: Int)(fun:() => Unit) {
  for (n <- 1 to count) { fun }
}

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

logString(3) { () => print("I") }

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

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

def logString(count: Int)(fun:() => Unit) {
  for (n <- 1 to count) { fun() }
}

结果成为预期的结果:

III

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

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

我是对的还是我想念Scala?

解决方法

看看有趣的类型,很有趣:()=>单元.您可以认为这意味着当您使用()调用它时,您将获得Unit作为回报.在没有明确调用它的情况下,fun将函数称为值,而不是调用它的结果.这是高阶函数概念的本质.

如果它有类型的乐趣:=>单位,只是提到乐趣会导致它被执行,在这种情况下,将无法将该函数作为值引用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读