标签: scala-2.11

Scala Pickling用于Json序列化和反序列化?

对于我的项目,第戎,我想知道是否可以使用Scala pickling进行JSON 序列化序列化.具体而言,我想是这样的def toJsonString(json: JSON, prettyPrint: Boolean = false): Stringdef fromJsonString(json: String): JSON.如何使用酸洗来创建这两种辅助方法?

json scala jsonserializer scala-pickling scala-2.11

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

SBT 0.13.7和Scala 2.11.5版本兼容性问题

尝试使用scala版本2.11.5的sbt版本0.13.7.两者都是最新的.他们一起工作吗?当我跑sbt clean compile,它打印:

[info] 'compiler-interface' not yet compiled for Scala 2.11.5. Compiling...
error: java.lang.NoClassDefFoundError: scala/tools/nsc/typechecker/Infer$Inferencer
Run Code Online (Sandbox Code Playgroud)

当更改为scala 2.11.4时,一切正常:

[info] 'compiler-interface' not yet compiled for Scala 2.11.4. Compiling...
[info]   Compilation completed in 13.434 s
Run Code Online (Sandbox Code Playgroud)

我找不到有关sbt和scala版本兼容性的任何相关来源.它是否与sbt构建针对scala 2.11有关?

scala compiler-errors compilation sbt scala-2.11

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

通过将非惰性集合转换为流来进行延迟评估有多容易?

这可能是一个愚蠢的问题,但我已经有一段时间不确定了.让我们假设这遍历我的列表三次:

def doSomething(list: List[Int]): List[Int] =
  list.map(...).flatMap(...).map(...)
Run Code Online (Sandbox Code Playgroud)

如果我改为:

def doSomething(list: List[Int]): List[Int] =
  list.toStream.map(...).flatMap(...).map(...).toList
Run Code Online (Sandbox Code Playgroud)

我保证一次迭代吗?

functional-programming scala scala-2.11

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

使用名为"clone"的隐式类方法编译错误

尝试使用名为的方法创建隐式类时,我收到意外的编译错误(在 2.11.8中)clone.

以下简化用法:

class Foo(val bar: String)

object Foo {
  implicit class Enrich(foo: Foo) {
    def clone(x: Int, y: Int): Int = x + y
  }
}

object Main extends App {
  val foo = new Foo("hello")
  println(foo.clone(1, 2))    // <- does not compile
}
Run Code Online (Sandbox Code Playgroud)

生成以下错误:

无法在Foo中访问类Object中的方法clone不允许受保护的方法clone,因为前缀类型Foo不符合访问发生的对象Main

但是,我可以手动应用隐式类,并成功编译:

println(Foo.Enrich(foo).clone(1, 2))    // <- OK
Run Code Online (Sandbox Code Playgroud)

如果我将方法重命名为其他东西(clone2例如),则代码按预期编译.

我假设这与魔法有关java.lang.Cloneable,但该方法并不期望参数.

那么这里发生了什么?

scala scala-2.11

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

适用于所有Traversable子类(包括Array)的隐式类

我遇到了一个问题,试图创建一个适用于所有Traversable子类(包括Array)的隐式类.我在Scala 2.11.1和2.10.4中尝试了以下简单示例:

implicit class PrintMe[T](a: Traversable[T]) {
  def printme = for (b <- a) print(b)
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该允许隐式转换为PrintMe,以便可以在任何Traversable上调用printme,包括List和Array.例如:

scala> List(1,2,3).printme
123
// Great, works as I expected!

scala> Array(1,2,3).printme
<console>:23: error: value printme is not a member of Array[Int]
              Array(1,2,3).printme
// Seems like for an Array it doesn't!

scala> new PrintMe(Array(1,2,3)).printme
123
// Yet explicitly building a PrintMe from an Array works 
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?为什么隐式转换适用于List而不是数组?

我知道有一些技巧适应java Arrays但是从http://docs.scala-lang.org/overviews/collections/overview.html查看下面的图片看起来似乎Array的行为就像Traversable的子类.

scala.collection.immutable

arrays scala implicit scala-2.10 scala-2.11

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

在Scala中过滤Failure(t)实例的惯用方法

如果我List[Try[A]]在Scala中有一个过滤掉Failure(t)值的惯用方法是什么?

一种方法是使用以下内容:

val someList: List[Try[String]] = ...
someList.filter(_.isFailure)
Run Code Online (Sandbox Code Playgroud)

是否有更"惯用"的方式,例如使用flatten?这看起来很简单.

monads scala exception-handling scala-2.11

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

是否可以在scala中装饰方法?

所以,我有一个对象,有方法,类似的东西:

object Connector {

  def createObject (id : Long, x : Double, y : Double, name : String, objtype : Int, layer : String) : String  = {
    //some code
  }

  def deleteObject (id : Long) : String  = {
    //some code
  }

  def findObject (name : String) : String  = {
    //some code
  }

  //some other methods
}
Run Code Online (Sandbox Code Playgroud)

例如,我想在所有方法中处理错误,使用相同的代码:

var res = domethod(methodParams)
if (res.indexOf("Error") > 0){
  doSomeOtherMethod() //that can fix error
  res = domethod(methodParams) //with same params
} …
Run Code Online (Sandbox Code Playgroud)

scala scala-2.11

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

使用Scala 2.11在独立模式下运行Spark?

我按照说明使用Scala 2.11构建Spark:

mvn -Dscala-2.11 -DskipTests clean package
Run Code Online (Sandbox Code Playgroud)

然后我按照说明启动:

./sbin/start-master.sh
Run Code Online (Sandbox Code Playgroud)

它在日志文件中有两行失败:

Failed to find Spark assembly in /etc/spark-1.2.1/assembly/target/scala-2.10
You need to build Spark before running this program.
Run Code Online (Sandbox Code Playgroud)

显然,它正在寻找scala-2.10版本,但我做了一个scala-2.11版本.我尝试了明显的-Dscala-2.11标志,但这没有改变任何东西.文档没有提到有关如何使用scala 2.11在独立模式下运行的任何内容.

提前致谢!

scala scala-2.11 apache-spark

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

Scala Some,None和我的自定义默认值

我们在Scala中有Some,None,我需要名为Default的第三个.背后的想法是:

我不想用我的自定义类型完全"遮蔽"一些"无".我希望让用户使用它们并在某些情况下应用我自己的"默认".

@Michael Zajac给出了几个选择,我认为第一个非常好.

我可以内置Some,None和"artificial"之类的

case object DefaultParamHere {
    def apply(): Option[String] = {
      Some("Substitute me we default framework value, please")
    }
  }
Run Code Online (Sandbox Code Playgroud)

谢谢!

用例将是:

case class Application(artifact: Artifact,
                              mainClass: Class[_],
                              jvmMemory: Option[Memory] = None,
                              jvmOpts: Option[String] = DefaultParamHere(),
                              applicationConfiguration: List[String] = Nil) extends Stage
Run Code Online (Sandbox Code Playgroud)

scala scala-2.11

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

Scala:for-comprehension类型推理问题的多个flatMap定义

我有这样的事情:

case class Box[A](x: A) {
  def flatMap[B](f: A => GenTraversableOnce[B]): GenTraversableOnce[B] =
    f(x)

  def flatMap[B](f: A => Box[B]): Box[B] =
    f(x)

  def map[B](f: A => B): Box[B] =
    Box(f(x))
}

object Box {
  for {
    i <- Box(0)
    j <- Box(1)
  } yield i + j
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在Scala 2.12.4中编译得很好,但是不能在Scala 2.11.12中编译:

[error] Box.scala:10: missing parameter type
[error]     i <- Box(0)
[error]     ^
[error] one error found
[error] (core/compile:compileIncremental) Compilation failed
Run Code Online (Sandbox Code Playgroud)

为什么?我究竟做错了什么??

然后我尝试了:

for {
  i: Int <- Box(0) …
Run Code Online (Sandbox Code Playgroud)

scala scalac scala-compiler scala-2.11 scala-2.12

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