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,也许不应该玩泛型:)我怎么做这个工作?
谢谢!
问题是您正在尝试创建新的通用数组,并且您的方法不知道如何因为数组需要类型信息.然后,您应该添加一个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应该从数组中获取它的类型.
| 归档时间: |
|
| 查看次数: |
1526 次 |
| 最近记录: |