扩展函数SCALA缺少参数类型

扩展函数SCALA缺少参数类型,scala,Scala,缺少扩展函数的参数类型 所以我的代码是: var filter = availableRestaurants.filter(_ => commonOrder.contains(_.cuisine)) 这将在“\u0.1”处为扩展函数抛出一个名为“缺少参数类型”的错误。我还尝试: var filter = availableRestaurants.filter(commonOrder.contains(_.cuisine)) commonOrder是字符串列表 而availableres

缺少扩展函数的参数类型

所以我的代码是:

var filter = availableRestaurants.filter(_ => commonOrder.contains(_.cuisine))
这将在“\u0.1”处为扩展函数抛出一个名为“缺少参数类型”的错误。我还尝试:

var filter = availableRestaurants.filter(commonOrder.contains(_.cuisine))
commonOrder
是字符串列表 而
availablerestarants
是一个对象列表,其中包含一个名为
courine

重写这样的内容的最佳方法是什么?或者这完全不合逻辑吗?

首先,不要在Scala中使用
var
(除非您必须这样做)。最好使用
val

var filter = availableRestaurants.filter(_ => commonOrder.contains(_.cuisine))
这是为
过滤器
函数指定的一个匿名函数,该函数丢弃其第一个参数。但是您希望使用包含检查的参数。(函数调用中的
\uu
是特殊的,第二个不是指第一个)

出现错误的原因是,
commonOrder.contains(u.couring)
部分需要首先(eta)展开,即方法调用需要转换为函数,因为
filter
需要函数。但是,如果不知道
\uu
代表什么,也不知道
.coineering
的类型,这就失败了

这样做:

val filter = availableRestaurants.filter(r => commonOrder.contains(r.cuisine))
或者,提前手动将该方法展开为函数:

val containsCuisine = (r: Restaurant) => commonOrder.contains(r.cuisine)
val filter = availableRestaurants.filter(containsCuisine)
或者,使用构图,类似于镜头:

val cuisineOf = (r: Restaurant) => r.cuisine // re-usable
val filter = availableRestaurants.filter(cuisineOf andThen commonOrder.contains)