我创建了一个函数:
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 举报,一经查实,本站将立刻删除。