微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scala – 在函数中执行函数时发出警告

我创建了一个函数

def ignore(f: Unit => Unit) = {
    userdisabled = true
    f
    userdisabled = false
}

现在我收到警告:

a pure expression does nothing in statement position; you may be omitting necessary parentheses

当我添加括号,并写入f()时,我得到:

Adaptation of argument list by inserting () has been deprecated: this is unlikely to be what you want. signature: Function1.apply(v1: T1): R given arguments: after adaptation: Function1((): Unit)

我究竟做错了什么?

解决方法

您可能想要将ignore声明为

def ignore(f: () => Unit) = {
    userdisabled = true
    f()
    userdisabled = false
}

带有返回Unit的0 arity函数

目前你有一个1 arg函数,它需要Unit类型的参数.这种类型只有一个值,它是().

当你简单地说f,你什么都不做,你不调用函数,因此第一个警告.就像你刚刚放:

userEnabled = true
42
userEnabled = false

当你说f()时,你没有将参数传递给期望它的函数. Scala可以为你提供Unit,但它已被弃用,因此是第二次警告.你应该把它称为f(()).

另一种选择可以是通过名称参数调用

def ignore(f: => Unit) = {
    userdisabled = true
    f
    userdisabled = false
}

在这种情况下,每次在方法体中使用时,f都会导致副作用.这是执行此类操作的最常见方式,从调用者的角度来看,您可以这么说

ignore {
  //code
}

代替

ignore(() => {
  //code
})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐