如果收到错误错误 could not find implicit value for evidence parameter of type scala.reflect.ClassManifest[T] ,则需要在类型参数上添加隐式参数(或等效地,上下文绑定) .
之前:
scala> def listToArray[T](ls: List[T]): Array[T] = ls.toArray
<console>:5: error: could not find implicit value for evidence parameter of type scala.reflect.ClassManifest[T]
def listToArray[T](ls: List[T]): Array[T] = ls.toArray ^
5 回答
你可以在这里找到preview of new feature in Scala2.8(2009年4月),最近完成this article(2009年6月)
命名和默认参数
嵌套注释
包对象
@specialized
改进的集合(这里可能需要重写一些)
REPL将完成命令(更多on that and other tricks in this article)
新控制抽象(继续或休息)
增强功能(摆动包装,演奏......)
"Rewriting code"不是义务(除了使用一些改进的集合),但某些功能如 continuation (Wikipedia:控件状态的抽象表示,或"rest of computation"或"rest of code to be executed")可以为您提供一些新的想法 . 一个很好的介绍是found here,由Daniel撰写(他在这个帖子中也发布了很多more detailed and specific answer) .
注意:Scala on Netbeans似乎适用于2.8夜间构建(与official page for 2.7.x相比)
迈出了一步
迁移时,编译器可以为您提供一些安全网 .
使用
-deprecation
将旧代码编译为2.7.7,并遵循所有弃用警告中的建议 .更新代码以使用未经编辑的软件包 . 这可以通过重复运行此正则表达式搜索替换来机械地完成 .
使用偏执命令行选项编译2.8.0编译器
-deprecation -Xmigration -Xcheckinit -Xstrict-warnings -Xwarninit
如果收到错误错误
could not find implicit value for evidence parameter of type scala.reflect.ClassManifest[T]
,则需要在类型参数上添加隐式参数(或等效地,上下文绑定) .之前:
后:
调用
listToArray
的任何方法本身都将T
作为类型参数,还必须接受Manifest作为隐式参数 . 有关详细信息,请参阅Arrays SID .您需要了解类型
Map
是Predef中collection.immutable.Map
的别名 .有三种类型名为
Map
- 一个只读接口:collection.Map
,一个不可变的实现:collection.immutable.Map
,以及一个可变的实现:collection.mutable.Map
. 此外,库定义了一组并行的特征MapLike
中的行为,但这实际上是一个实现细节 .收获利益
使用named和default参数替换某些方法重载 .
使用生成的
copy
案例类方法 .将方法签名从
List
概括为Seq
或Iterable
或Traversable
. 由于集合类处于干净的层次结构中,您是否可以接受更通用的类型 .使用Annotations与Java库集成 . 您现在可以指定嵌套注释,并且注释是否针对字段或方法具有fine-grained control . 这有助于将Spring或JPA与Scala代码一起使用 .
在开始迁移时,可以安全地忽略许多其他新功能,例如
@specialized
和Continuations .VonC的答案很难改进,所以我甚至都不会尝试 . 我将介绍他未提及的其他一些内容 .
首先,一些被弃用的东西将会消失 . 如果您的代码中有弃用警告,则可能不再编译 .
接下来,Scala的库正在扩展 . 通常,常见的小模式,例如将异常捕获到
Either
或Option
,或将AnyRef转换为选项,其中null
映射到None
. 这些东西大部分都可以忽略不计,但我已经在Scala 2.8上了 . 嗯,实际上,我并没有厌倦它,而是,幸运的是,习惯了它 . 我不是在谈论收藏品,这些收藏品正在进行重大修订 .现在,如果人们发布这种图书馆改进的实际例子作为答案,那就太好了 . 我很乐意提出所有这些答案 .
REPL不仅仅是命令完成 . 它获得了很多东西,包括检查对象的AST的能力,或者将断点插入到代码中的能力落入REPL .
此外,Scala的编译器正在被修改,以便能够为IDE提供快速的部分编译,这意味着我们可以期望它们变得更加“了解”Scala - 通过查询Scala编译器本身的代码 .
一个很大的变化可能会被许多人忽视,尽管它会减少图书馆作家和用户的问题 . 现在,如果你写下面的内容:
您导入的不是Java的
net
库,而是com.mystuff.java
的net
库,因为com
,com.mystuff
,com.mystuff.java
和com.mystuff.java.wrappers
都在范围内,并且java
可以在com.mystuff
中找到 . 使用Scala 2.8,只有wrappers
获得范围 . 由于有时您希望其余部分在Scope中,因此现在允许使用另一种语法:这相当于:
碰巧将
factories
和lightbulbs
都纳入范围 .需要成为
我不得不访问那个IRC Channels ,但后来意识到我应该从这里开始 .
这是Eric Willigers的清单,自2.2以来一直使用Scala . 其中一些东西似乎可以追溯到最近的用户 .