我有一个列表,我正在尝试编写一个函数returnMatchedElement(x:Int,y:Int,f:(Int,Int)=>Boolean)
,如果某个条件与列表的某个元素匹配,它将返回该元素。这是我到目前为止所得到的:
def returnMatchedElement(x:Int,l:List[Int],f:(Int,Int)=>Boolean):Int={
for (y<-l if f(x,y)) yield y
0}
def matchElements(a:Int,b:Int):Boolean= {if a==b true else false}
val l1=List(1,2,3,4,5)
returnMatchedElement(3,l1,matchElements)
res13: Int = 0
我猜我在理解yield
关键字方面有问题。我在这里做错了什么?
编辑
下面的答案有效(谢谢),但前提是 f 返回布尔值。我尝试了另一个这样的例子
def matchElements(a:Int,b:Int):Int= {if (a==b) 1 else 0}
def returnMatchedElement(x:Int,l:List[Int],f:(Int,Int)=>Int):Option[Int]={l.find(y => f(x, y))}
现在编译器说
<console>:8: error: type mismatch;
found : Int
required: Boolean
def returnMatchedElement(x:Int,l:List[Int],f:(Int,Int)=>Int):Option[Int]={l.find(y => f(x, y))}