从Scala中的通用选项数组返回值

Ale*_*lex 2 scala scala-option

我在使用我的函数泛型方面遇到一些困难,需要一些帮助.我有一个数组采用T的选项,其中T是一个分数.在F#中,有一个"选择"功能可以从一组选项中删除无.在scala中,我试图使用"flatten",但它不适用于泛型类型.

我的代码是

var arr = Array.fill(capacity)(None :Option[T])
Run Code Online (Sandbox Code Playgroud)

......后来我试着获得Some的价值观:

var flat = arr.flatten
Run Code Online (Sandbox Code Playgroud)

错误是:

错误:找不到参数m的隐含值:scala.reflect.ClassManifest [U] val flat = arr.flatten

我是一个完整的scala noob,也许不应该玩泛型:)我怎么做这个工作?

谢谢!

Rex*_*err 6

问题是您正在尝试创建新的通用数组,并且您的方法不知道如何因为数组需要类型信息.然后,您应该添加一个ClassManifest上下文绑定,以便数组知道如何创建自己:

def flat[T: ClassManifest](bumpy: Array[Option[T]]): Array[T] = bumpy.flatten
val fish = Array(Some("salmon"), None, Some("haddock"))
flat(fish)  // Prints Array(salmon, haddock)
Run Code Online (Sandbox Code Playgroud)

请注意,如果您尝试将数组直接传递给方法,那么在尝试确定它的类型时会感到困惑; 你需要val的赋值让它知道数组本身包含有关其类型的所有信息,然后flat应该从数组中获取它的类型.

  • -1:鲑鱼和黑线鳕都不是扁鱼 (4认同)