小编yǝs*_*ǝla的帖子

20
推荐指数
3
解决办法
6754
查看次数

Akka(2.3.0)无法使用java.lang.ClassNotFoundException加载Slf4jEventHandler类

我从Akka 2.2.3迁移到2.3.0-RC4并在应用程序启动时收到此错误消息:

error while starting up loggers
akka.ConfigurationException: Logger specified in config can't be loaded 
[akka.event.slf4j.Slf4jEventHandler] due to
[java.lang.ClassNotFoundException: akka.event.slf4j.Slf4jEventHandler]
Run Code Online (Sandbox Code Playgroud)

我有这些SBT依赖项:

val akkaVersion = "2.3.0-RC4"
"com.typesafe.akka" % "akka-actor_2.10" % akkaVersion
"com.typesafe.akka" % "akka-remote_2.10" % akkaVersion
"com.typesafe.akka" % "akka-kernel_2.10" % akkaVersion
"com.typesafe.akka" % "akka-slf4j_2.10" % akkaVersion
"com.typesafe.akka" % "akka-testkit_2.10" % akkaVersion % "test"
Run Code Online (Sandbox Code Playgroud)

在我升级之前使用Akka 2.2.3版本时,日志工作正常(项目中没有进行任何其他更改).

以下是我在我的使用中使用logger的方法application.conf:

akka.loggers = ["akka.event.slf4j.Slf4jEventHandler"]
Run Code Online (Sandbox Code Playgroud)

我检查了SBT下载的jar文件Slf4jEventHandler,只出现在旧版本中:

  • 包含NO Slf4jEventHandler:~/.ivy2/cache/com.typesafe.akka/akka-slf4j_2.10/jars/akka-slf4j_2.10-2.3.0-RC4.jar
  • 包含Slf4jEventHandler:~/.ivy2/cache/com.typesafe.akka/akka-slf4j_2.10/jars/akka-slf4j_2.10-2.2.3.jar

我想知道我是否应该使用其他一些记录器类,我是否缺少依赖性,或者它可能没有被错误打包.我在文档中找不到有关此更改的任何内容.

logging scala akka

11
推荐指数
1
解决办法
5986
查看次数

如何使用Scala反射递归访问对象的所有公共成员?

我不知道如何在不知道/指定其类型的情况下如何访问对象成员RECURSIVELY.在我的情况下,问题仅限于我想要访问的lazy vals和object成员.对象可以嵌套到lazy vals存在于其中的任何深度.例如:

object TestShallow {
  lazy val value1 = 1
}

object TestDeep {
  lazy val value1 = 1

  object NestedObj {
    lazy val value2 = 2
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止:

import scala.reflect.ClassTag
import scala.reflect.runtime.universe._

  def evalMemberValues[A: TypeTag](topLevelObj: A)(implicit c: ClassTag[A]): Unit = {
    val mirror = runtimeMirror(getClass.getClassLoader)

    def loop[B: TypeTag](obj: B)(implicit c: ClassTag[B]): Unit = {
      println(s"INSPECTING: $obj: ${typeOf[B]}")
      val members = typeOf[B].decls.filter(_.isPublic)
      members.foreach { m =>
        if(m.isTerm && m.isModule) {
          println(s"MODULE: $m") …
Run Code Online (Sandbox Code Playgroud)

reflection recursion types scala mirror

7
推荐指数
1
解决办法
79
查看次数

OCaml Currying /多个参数

我有一个简单的功能:

 let rec ap x y = if x < 10 then 12 else ap((x-1) (y));;
Run Code Online (Sandbox Code Playgroud)

但我不断得到的错误是:

Error: This expression has type int
   This is not a function; it cannot be applied.
Run Code Online (Sandbox Code Playgroud)

我现在已经坚持了2个小时,我无法弄清楚为什么这不起作用?

此外,我只是简化了函数,因为在我的实际ocaml代码中,问题归结为此.我不确定这是否与currying有关,但有人可以解释为什么会发生这种情况吗?

ocaml functional-programming currying

6
推荐指数
1
解决办法
1530
查看次数

给定序列中的元素,如何获取前一个元素?

假设我有一个Scala列表List("apple", "orange", "banana", "chinese gooseberry")*.我想搜索此列表并返回列表中与我已有项目相关的上一项.

例如:getPrevious(fruit: String, fruits: List[String]): Option[String]应该返回

  • Some("apple")如果我把它称为fruitarg "orange";
  • Some("banana")"chinese gooseberry";
  • None如果我调用它"apple"(没有以前的元素存在)或"potato"(不存在于列表中).

很容易完成,但我怎么能以优雅的功能方式做到这一点?我能想到的最好的是以下内容:

def previous(fruit: String, fruits: List[String]): Option[String] =
  fruits.sliding(2)
  .filter { case List(previous, current) => current == fruit }
  .toList
  .headOption
  .map { case List(previous, current) => previous }
Run Code Online (Sandbox Code Playgroud)

它有效,但它不优雅或高效.我特别讨厌转换filter迭代器toList.我怎样才能改进它?

(*作为一个旁边,是List用于sliding迭代的最佳集合?)

scala scala-collections

6
推荐指数
2
解决办法
1788
查看次数

如何在specs2中为DataTables定义Context

我正在尝试定义一些上下文,以便为每行数据表执行它(在每行上运行断言之前).

我找到了这个例子,但对于我的生活,我无法弄清楚如何编写完整的测试套件.我想定义一次上下文并与所有示例共享.这大致是我所拥有的:

class SomeSuite extends Specification with DataTables {

// TODO: define context somehow???
// val context = new Before { println("BEFORE") }

"test 1" should {
  "do something" in {
    context |
    "col1" | "col2" |
    val1   ! val2   |
    val3   ! val4   |> {
      (a, b) => //some assertion with (a, b)
    }
  }
}
}
Run Code Online (Sandbox Code Playgroud)

我想在每次断言(a,b)之前每次打印(共2次)"BEFORE".

我真的很感激任何帮助.

谢谢 ;)

感谢Eric,这是我的最终代码.我只添加了"隐式",因为许多测试都共享了上下文:

class SomeSuite extends Specification with DataTables {

  implicit val context = new Before { def …
Run Code Online (Sandbox Code Playgroud)

unit-testing scala specs2

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

MongoDB中的条件upsert

我已经在LinkedIn上回答了这个问题,我认为分享它是有用和有趣的.问题是:

"假设我们有像这样的文件{_id: ..., data: ..., timestamp: ...}.

有没有办法编写满足以下规则的更新条件:

1如果没有以下文件,_id则插入此文件;

2如果存在文件与以下_id

2.1如果新的时间戳大于存储的时间戳则更新data;

2.2否则什么都不做"

design-patterns mongodb

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