我是Scala的初学者,我只是对Scala如何处理此代码段的类型推断感到好奇
trait Expression { .... }
def eval (binding : String => Boolean) : Expression => Boolean
我理解绑定是一个将String
转换为Boolean
的函数,但为什么binding
同时可以声明为Expression
的成员?它被隐式转换了吗?它是如何工作的?
对不起,如果我的问题有点令人困惑
非常感谢:D
答案 0 :(得分:5)
正如JörgWMittag所说,这里绝对没有类型推断。
def eval (binding : String => Boolean) : Expression => Boolean
只是一个抽象方法声明(抽象,因为它没有正文)。它可以以不同的方式实现,具体取决于Expression
的定义。
为什么同时
的成员binding
可以声明为Expression
鉴于您发布的内容,它不能。
答案 1 :(得分:4)
我认为关键点在于,函数eval
返回一个函数,其类型为Function2[Expression, Boolean]
。
更清楚地说:
def eval (binding : String => Boolean) : (Expression => Boolean)
binding
和Expression
之间没有直接关系。