[英]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.