繁体   English   中英

缺少扩展 function SCALA 的参数类型

[英]Missing parameter type for expanded function SCALA

缺少扩展 function 的参数类型

所以我的代码是:

var filter = availableRestaurants.filter(_ => commonOrder.contains(_.cuisine))

这会在“_.cuisine”处引发一个名为扩展 function 的缺少参数类型的错误。 我也试过:

var filter = availableRestaurants.filter(commonOrder.contains(_.cuisine))

commonOrder是一个字符串列表, availableRestaurants是一个对象列表,其中包含一个名为cuisine的字符串字段。重写这样的东西的最佳方法是什么,或者这完全不合逻辑?

首先,永远不要在 Scala 中使用var除非你必须这样做)。 更好地使用val

var filter = availableRestaurants.filter(_ => commonOrder.contains(_.cuisine))

这是给filter function 一个匿名 function 丢弃它的第一个参数。 但是您想使用包含检查的参数。 (function 调用中的_是特殊的,第二个不指第一个)

错误的原因是commonOrder.contains(_.cuisine)部分需要先(eta)扩展,即。 方法调用需要转换为 function,因为filter需要 function。 但是不知道_代表什么,因此不知道_.cuisine的类型是什么,这会失败。

像这样做:

val filter = availableRestaurants.filter(r => commonOrder.contains(r.cuisine))

或者,事先手动将该方法扩展为 function:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM