Scala的泛型

art*_*mka 1 scala

我想为进程序列编写一个函数,如下所示:

def wrap[A >: Seq[_], B](seq : A)(f : () => B): Option[B] = {
    if(seq.isEmpty) None
    else Some(f())
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用错误:

error: value isEmpty is not a member of type parameter A
Run Code Online (Sandbox Code Playgroud)

if(seq.isEmpty)无

我做错了什么?

dhg*_*dhg 6

你根本不需要说什么A.只要说第一个参数wrap是a Seq,那么你可以传入一个Seq或任何子类:

def wrap[B](seq : Seq[_])(f : () => B): Option[B] = {
    if(seq.isEmpty) None
    else Some(f())
}

wrap(List(1,2,3))(() => "hi") //returns Some("hi")
Run Code Online (Sandbox Code Playgroud)

  • 或者只是`seq.headOption.map(x => f())` (4认同)