小编dmi*_*try的帖子

SBT:外部配置文件,其中的值可在build.sbt中访问

我有一个标准结构的sbt项目.我想要有文件,我可以将其与我的构建分开并指定在Build.scala或build.sbt中使用的值(以省略使用本地配置的破坏存储库).

它可能是普通的.properties格式或scala文件,或类型安全配置,或任何其他(当然最常见的.sbt实践):

prop1=value1
prop2=42
.......
Run Code Online (Sandbox Code Playgroud)

是否有通用的做法,因此可以在sbt构建文件中访问这些值?我想将它们作为测试参数传递,以避免构建文件本身.

scala sbt

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

如何在Scala代码中与编译器交互?

我想知道有多少种方法可以在正常的"在命令行上调用它来编译我的源代码"之外与Scala编译器进行交互.

是否有一些方法可以解析代码,构建抽象语法树或使用库在运行时编译代码?

compiler-construction programming-languages scala compilation abstract-syntax-tree

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

Scala类似于"with object do begin ... end"(快捷方法访问)

在旧生锈的Pascal中,有一个方便的构造来对对象或记录执行一系列操作:

with obj do
begin
  methodCall
  otherMethodCall
  ...
end
Run Code Online (Sandbox Code Playgroud)

我试图在scala中触摸类似的东西,但在我脑海中缺少的东西:)

是否有可能以某种方式实现这样的效果,就好像obj在传递闭包的当前范围内并且表现如下:

{
  import obj._
  callObjMethod(x, y)
  objVal.doSomething()
  ...
}
Run Code Online (Sandbox Code Playgroud)

但在自定义语法中:

doWith (obj) {
  callObjMethod(x, y)
  objVal.doSomething()
}
Run Code Online (Sandbox Code Playgroud)

直觉上我觉得这no不仅仅是yes好奇心想知道的.

scala

5
推荐指数
2
解决办法
347
查看次数

ScalikeJDBC + SQlite:建立连接后无法更改只读标志

尝试使用 ScalikeJDBC 和 SQLite。根据提供的示例编写一个简单的代码:

import scalikejdbc._, SQLInterpolation._

object Test extends App {
  Class.forName("org.sqlite.JDBC")
  ConnectionPool.singleton("jdbc:sqlite:test.db", null, null)

  implicit val session = AutoSession

  println(sql"""SELECT * FROM kv WHERE key == 'seq' LIMIT 1""".map(identity).single().apply()))
}
Run Code Online (Sandbox Code Playgroud)

它失败但有异常:

Exception in thread "main" java.sql.SQLException: Cannot change read-only flag after establishing a connection. Use SQLiteConfig#setReadOnly and QLiteConfig.createConnection().
at org.sqlite.SQLiteConnection.setReadOnly(SQLiteConnection.java:447)
at org.apache.commons.dbcp.DelegatingConnection.setReadOnly(DelegatingConnection.java:377)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setReadOnly(PoolingDataSource.java:338)
at scalikejdbc.DBConnection$class.readOnlySession(DB.scala:138)
at scalikejdbc.DB.readOnlySession(DB.scala:498)
...
Run Code Online (Sandbox Code Playgroud)

我已经尝试了 scalikejdbc 1.7 和 2.0,错误仍然存​​在。作为 sqlite 驱动程序,我使用"org.xerial" % "sqlite-jdbc" % "3.7.+".

我可以做什么来修复该错误?

sqlite scala scalikejdbc

5
推荐指数
1
解决办法
2730
查看次数

scala:类型不匹配错误 - 找到T,必需字符串

我正在学习scala,这个问题可能很愚蠢,但是......为什么?

例如,这没关系:

def matchList(ls: List[Int]): List[Int] = ls match {
  case 1 :: rest => rest
  case a :: b :: rest => (a + b) :: rest
  case _ => ls
}

matchList: (ls: List[Int])List[Int]
Run Code Online (Sandbox Code Playgroud)

但是带有类型参数的函数无法编译:

def matchList[T](ls: List[T]): List[T] = ls match {
  case 1 :: rest => rest
  case a :: b :: rest => (a + b) :: rest
  case _ => ls
}

<console>:10: error: type mismatch;
found   : T
required: String
   case a :: …
Run Code Online (Sandbox Code Playgroud)

types scala

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

带有$的Scala正则表达式(字符串结尾)

我有点困难.(我是regexp的专家,但在scala/java中没有太多使用它们).我有11个字符长度的数字字符串,只需要最后10个,所以:

val Pattern = """(\d{10})$""".r
"79283767219" match {
  case Pattern(m) => m
}
Run Code Online (Sandbox Code Playgroud)

它给了MatchError,但为什么?!我误解了什么?

regex scala

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

SBT:访问scala构建中子项目的设置值

我有一个SBT(0.13.2)多项目,并在一个单独的构建文件中声明了一组子项目,如下所示:

object SubBuilds extends Build {
  lazy val sub_project1 = Project("sub_project1",  file("sub/Project1")).dependsOn(Build.core)
  lazy val sub_project2 = Project("sub_project2", file("sub/Project2")).dependsOn(Build.core)
  ...
}
Run Code Online (Sandbox Code Playgroud)

每个子项目都有自己的build.sbt文件,name := "..."可以在其中指定.

我可以root简单地访问构建中的项目列表SubBuilds.projects并获取Seq[Project].它本来settings: Seq[Def.Setting[_]]就是我希望使用的属性,但我完全不知道如何从这些属性中获取价值.我可以找到一个带键的设置,name但它没有任何相似之处value.

我怎样才能实现这一点:name在scala构建中使用Project实例获取属性?

更新:我应该注意到我打算在其他任务中使用它,我尝试了@ eugene-yokota的答案,但它在构建编译期间产生"非法动态引用".

object CustomTasks {
  /** Task to display Subprojects */
  val subList = taskKey[Unit]("Display subprojects")

  val subListTask = subList := {
    SubBuilds.projects foreach { a =>
      val v = (name in a).value
      println(s"Subproject ${a.id}, …
Run Code Online (Sandbox Code Playgroud)

scala sbt

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

spray-can webservice正常关机

我有基于spray.io的webservice,它作为独立jar运行(我使用sbt assembly然后只是java -jar myws.jar).它与喷涂示例中的靴带非常相似,如下所示:

/** Bootstrap */
object Boot extends App {
   // we need an ActorSystem to host our application in
   implicit val system = ActorSystem("my-system")

   // create and start our service actor
   val service = system.actorOf(Props[MyServiceActor], "my-ws-service")

   implicit val timeout = Timeout(10.seconds)

   CLIOptionsParser.parse(args, CLIOptionsConfig()) map { config =>
     // start a new HTTP server
     IO(Http) ? Http.Bind(service, interface = config.interface, port = config.port)
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我只是在背景中运行该过程java -jar my-service "$@" &并停止 …

web-services scala akka spray

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

喷涂IO,为响应添加标头

我有(以前)REST spray.io webservice.现在,我需要在我的一个方法中生成SESSIONID以与其他一些方法一起使用.我希望它在响应标题中.

基本上,我想象逻辑如下:

 path("/...") {
   get {
     complete {
       // some logic here
       // .....
       someResult match {
         case Some(something) =>
           val sessionID = generateSessionID
           session(sessionID) = attachSomeData(something)
           // here I need help how to do my imaginary respond with header
           [ respond-with-header ? ]("X-My-SessionId", sessionID) {
             someDataMarshalledToJSON(something)
           }


         case None => throw .... // wrapped using error handler
       }
     } 
   }
 }
Run Code Online (Sandbox Code Playgroud)

但是,它并不完整,我指的是respondWithHeader指令.我需要一个建议.

scala spray spray-dsl

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

Spark:广播杰克逊ObjectMapper

我有一个spark应用程序,它从文件中读取行并尝试使用jackson对它们进行反序列化.为了使这段代码能够工作,我需要在Map操作中定义ObjectMapper(否则我得到一个NullPointerException).

我有以下代码正在工作:

val alertsData = sc.textFile(rawlines).map(alertStr => {
      val mapper = new ObjectMapper()
      mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
      mapper.registerModule(DefaultScalaModule)
      broadcastVar.value.readValue(alertStr, classOf[Alert])
    })
Run Code Online (Sandbox Code Playgroud)

但是,如果我在地图外部定义映射器并对其进行广播,则会因NullPointerException而失败.

此代码失败:

val mapper = new ObjectMapper()
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
    mapper.registerModule(DefaultScalaModule)
    val broadcastVar = sc.broadcast(mapper)

    val alertsData = sc.textFile(rawlines).map(alertStr => {
      broadcastVar.value.readValue(alertStr, classOf[Alert])
    })
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

谢谢,Aliza

scala jackson apache-spark

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

.sbt 重新定义测试任务

出于我的具体原因,我想覆盖test任务以运行并非所有测试,而是像test-only TopTestSuiteName param1 param2. 是否可以?

我试图阅读有关任务和示例的文档,但仍远未了解什么是可能的,什么是不可能的。

或者我可以创建自定义任务并以某种方式使用现有test-only功能?我觉得这是合理的,但完全无法理解 - 我从哪里开始。

scala sbt

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

Python如果修饰符优先

对不起,我确信它被问了十亿次,但我还没有找到确切的答案:

var = value if condition else other_value
Run Code Online (Sandbox Code Playgroud)

if .. else相对于作业的优先顺序是什么?就像在C/Java三元组中一样?

python

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