有几种方法可以在Scala中构造不可变列表(请参阅下面的设计示例代码).您可以使用可变的ListBuffer,创建var列表并对其进行修改,使用尾递归方法,以及可能还有其他我不了解的方法.
本能地,我使用ListBuffer,但我没有充分的理由这样做.有没有一种首选或惯用的方法来创建列表,还是有一种方法最适合一种方法而不是另一种方法?
import scala.collection.mutable.ListBuffer
// THESE are all the same as: 0 to 3 toList.
def listTestA() ={
var list:List[Int] = Nil
for(i <- 0 to 3)
list = list ::: List(i)
list
}
def listTestB() ={
val list = new ListBuffer[Int]()
for (i <- 0 to 3)
list += i
list.toList
}
def listTestC() ={
def _add(l:List[Int], i:Int):List[Int] = i match {
case 3 => l ::: List(3)
case _ => _add(l ::: List(i), i …Run Code Online (Sandbox Code Playgroud) 有没有做到以下几点没有做这两种方法的方法:find和map?
val l = 0 to 3
l.find(_ * 33 % 2 == 0).map(_ * 33) // returns Some(66)
Run Code Online (Sandbox Code Playgroud) 我有一个使用全局线程池的现有java/scala应用程序.我想开始在项目中使用actor,但希望应用程序中的所有内容都使用相同的池.
我知道我可以设置actor使用但希望共享线程池的最大线程数.这是否必要/合理,是否可以指定actor的线程池?
如果不可能/推荐,在已经使用线程的应用程序中集成actor时是否有任何经验法则?
谢谢.
在阅读了reactScala中的演员使用之后,我认为react在没有多个react待定的情况下会分享相同的线程.似乎并非如此.
import scala.actors.Actor
import scala.actors.Actor._
class SleepyReactor extends Actor {
def act() {
loop {
react {
case x => {
println("reacting to %s on thread %s".format(x, Thread.currentThread.getName))
Thread.sleep(1000)
println("done with " + x)
}
}
}
}
}
val sleepyOne = new SleepyReactor
sleepyOne.start
sleepyOne ! "first" // runs on thread-5
// wait until completion
sleepyOne ! "second" // runs on thread-3
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么这些react是在不同的线程上运行,以及何时为一个演员创建一个新的线程react?
我读到某个地方react是基于事件的,我认为这意味着"反应行动者"共享一个线程,如果一个人"反应",其他"反应行动者"将排队,直到第一个完成.我现在认为我错了.这是如何工作的,它与收到的有何不同?
我不明白为什么以下情况不匹配.Null应该是Any的实例,但它不匹配.有人可以解释发生了什么吗?
val x = (2, null)
x match {
case (i:Int, v:Any) => println("got tuple %s: %s".format(i, v))
case _ => println("catch all")
}
prints catch all
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在使用flatspec特征来创建我的测试,我想创建一个基类,该基类将使用特定标签自动标记该类中的所有测试。
例如,继承自IntegrationTest类的类中的任何测试都将被自动标记。所以代替:
class ExampleSpec extends FlatSpec {
"The Scala language" must "add correctly" taggedAs(IntegrationTest) in {
val sum = 1 + 1
assert(sum === 2)
}
Run Code Online (Sandbox Code Playgroud)
我想这样做,但仍将测试标记为IntegrationTest
class ExampleSpec extends IntegrationSpec {
"The Scala language" must "add correctly" in {
val sum = 1 + 1
assert(sum === 2)
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我是ML的新手,正在参加一个讨价还价的比赛,以便学习一下.当我向数据集添加某些功能时,准确性会降低.
为什么增加成本的功能不会加权为零(忽略)?是因为非线性特征会导致局部最小解?
谢谢.