小编Pet*_*ens的帖子

Scala 上的运算符短返回 Int?

我是 Scala 的新手,我很好奇为什么+or+=运算符返回 aInt而不是 a Short?我有一个简单的代码如下,

count :Short
count += 1.toShort
Run Code Online (Sandbox Code Playgroud)

+=运算符返回一个Int,我假设这是故意的并且想知道原因。

我需要简短一点,因为我将结果存储在数据库中并希望节省磁盘空间。我当然可以让计算发生Int,然后总是.toShort在存储之前调用结果,但这有点违反直觉。

scala short

4
推荐指数
1
解决办法
1733
查看次数

如何在scala过滤器中应用或条件?

我有一个列表,Int我想借助于或声明过滤列表.

例如 :

var a = List(1,2,3,4,5,6)
Run Code Online (Sandbox Code Playgroud)

我想根据_ % 3 == 0或过滤列表_ % 2 == 0.

我怎样才能做到这一点?

scala

4
推荐指数
1
解决办法
6070
查看次数

什么()在Scala中意味着什么?

我找到了一个Scala代码片段,它声明了一个方法<init>并放在()调用之下.

我对第5行有疑问.()这里的意思是什么?

(() => {
  final class $anon extends MutableProjection {
    def <init>() = {
      super.<init>();
      ()
    };
    ...
  };
  new $anon()
})
Run Code Online (Sandbox Code Playgroud)

这是一个完整示例的代码.

scala

4
推荐指数
2
解决办法
1670
查看次数

仅使用IO monad中没有先前IO操作的值

做一些家庭项目,我遇到了一个感兴趣的效果,现在,对我来说似乎很明显,但我仍然没有办法摆脱它.这是要点(我使用ScalaZ,但在haskell中可能会有相同的结果):

def askAndReadResponse(question: String): IO[String] = {
  putStrLn(question) >> readLn
}

def core: IO[String] = {
  val answer: IO[String] = askAndReadResponse("enter something")
  val cond: IO[Boolean] = answer map {_.length > 2}
  IO.ioMonad.ifM(cond, answer, core)
}
Run Code Online (Sandbox Code Playgroud)

当我试图从中获取输入时core,askAndReadResponse评估两次 - 一次用于评估条件,然后用于ifM(因此我有消息,readLn然后再需要一次).我需要什么 - 只是验证的值(例如,稍后打印)

有没有优雅的方法来做到这一点,特别是 - 进一步传递IO的结果,没有先前的IO动作,即避免执行 askAndReadResponse两次?

io monads scala scalaz

4
推荐指数
1
解决办法
78
查看次数

任何人都可以给我一个很好的例子这种关于"什么使一个对象有状态"的情况?

我不明白这句话的意思(来自Scala-Threading/Odersky/18-stateful-objects.txt第88行):

一个类可能是有状态的,没有定义或继承任何变量,因为它将方法调用转发给具有可变状态的其他对象.

任何人都可以在Scala中给我一个很好的例子吗?

scala stateful object

4
推荐指数
1
解决办法
88
查看次数

使用case-classes进行可变状态是否(真的那么糟糕)?

请考虑以下代码:

case class Vector3(var x: Float, var y: Float, var z: Float)
{
  def add(v: Vector3): Unit =
  {
    this.x += v.x
    this.y += v.y
    this.z += v.z
  }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,case class持有可变状态.这样做是非常沮丧的,通常我同意并且绝对坚持这个"规则",但这里讲的是整个故事.

我正在使用Scala 从头开始编写一个小型3D游戏引擎.所以首先我考虑使用(更多)功能样式,但垃圾收集器会过于频繁.

想一想:我在测试游戏中有几十个实体.所有这些都有一个位置(Vector3),一个方向(Vector3),一个比例(Vector3)和一大堆矩阵.如果我要在这些类(Vector3和Matrix4)中运行并使它们不可变,我会每帧返回数百个新对象,导致巨大的fps损失,因为,让我们面对它,GC有其用途,但在游戏引擎和OpenGL ......不是那么多.

Vector3之前是一个类,但它现在是一个case类,因为代码中的某个地方我需要模式匹配.

那么,使用保持可变状态的案例类真的那么糟糕吗?

请不要把它变成一个关于讨论"为什么你甚至可以使用Scala开发等项目吗?" 我知道可能有更好的替代方案,但我对用C++编写(又一个)引擎不感兴趣,我也不太愿意潜入Rust(还).

scala mutable case-class

3
推荐指数
1
解决办法
760
查看次数

Scala用于理解Future,List和Option

我在斯卡拉建设一个活性位点和播放框架,以及我的数据模型是这样的,我经常需要编写FutureOption,并建立FutureList/ Set以前的值以得到结果,我所需要的.

我写了一个带有假数据源的简单应用程序,你可以复制和粘贴它,它应该编译.我的问题是,在我的情况下UserContext,如何以可消耗的形式取回结果.目前,我要回来了Future[Option[Future[UserContext]]].

我想在纯Scala中这样做以更好地学习语言,所以我现在正在避开Scalaz.虽然我知道我最终应该使用它.

package futures

import scala.concurrent.{Future, ExecutionContext}

// http://www.edofic.com/posts/2014-03-07-practical-future-option.html
case class FutureO[+A](future: Future[Option[A]]) extends AnyVal {

  def flatMap[B](f: A => FutureO[B])(implicit ec: ExecutionContext): FutureO[B] = {
    FutureO {
      future.flatMap { optA =>
        optA.map { a =>
          f(a).future
        } getOrElse Future.successful(None)
      }
    }
  }

  def map[B](f: A => B)(implicit ec: ExecutionContext): FutureO[B] = {
    FutureO(future.map(_ map f))
  }
}

// ========== USAGE OF FutureO BELOW ============= …
Run Code Online (Sandbox Code Playgroud)

scala future playframework reactivemongo

3
推荐指数
1
解决办法
1109
查看次数

Foo在Scala中不带参数编译错误?

我有一个编译错误,我不明白。

case class Point(x: Int, y: Int)

trait Rectangular {

  def topLeft: Point
  def bottomRight: Point

  def left = topLeft().x //Compile error occurring here
  def right = bottomRight.x
  def width = right - left

  // any many more concrete geometric methods.
 }
Run Code Online (Sandbox Code Playgroud)

我在定义第三种方法的行上收到编译错误,说“Point 不带参数”。

但是我认为您可以调用一个不带参数的函数,无论是否带有(). AstopLeft只是一个没有参数且返回类型为Point.

methods scala function traits

3
推荐指数
1
解决办法
5872
查看次数

Scala编译错误:"没有隐式视图可用"和"分散隐式扩展"

 def MyFun(result: ListBuffer[(String, DateTime, List[(String, Int)])]):
 String = {
 val json =
  (result.map {
    item => (
      ("subject" -> item._1) ~
        ("time" -> item._2) ~
        ("student" -> item._3.map {
          student_description=> (
            ("name" -> lb_result._1) ~
              ("age" -> lb_result._2) 
            )
        })
      )
    }
    )
    val resultFormat = compact(render(json))
    resultFormat  
}
Run Code Online (Sandbox Code Playgroud)

错误1:org.joda.time.DateTime => org.json4s.JsonAST.JValue没有隐式视图.("subject" - > item._1)〜

错误2:类型Nothing => org.json4s.JsonAST.JValue的分散隐式扩展从特征中的方法seq2jvalue开始JSONDSL val resultFormat = compact(render(json))

scala json4s

2
推荐指数
1
解决办法
1900
查看次数

如何将scala.collection.immutable.List [scala.collection.mutable.MutableList [String]]转换为java.util.List [java.util.List [String]]

我有一个Scala方法在java类中使用抛出下面的错误.由于某种原因,隐式转换不起作用List,Lists但它确实适用于List.(为前:mutable.MutableListutil.List)

Error:(124, 143) type mismatch;
    found: scala.collection.immutable.List[scala.collection.mutable.MutableList[String]]
     required: java.util.List[java.util.List[String]]
Run Code Online (Sandbox Code Playgroud)

要么

Error:(124, 143) type mismatch;
    found: scala.collection.immutable.List[scala.collection.mutable.MutableList[String]]
     required: scala.collection.immutable.List[java.util.List[String]]
Run Code Online (Sandbox Code Playgroud)

java scala list scala-java-interop

2
推荐指数
1
解决办法
1205
查看次数