小编Eug*_*ota的帖子

Scala:路径依赖类型的等价性

我如何解决两个与路径相关的类型的等价,我知道它们是相同但编译器没有?

使用Scala 2.10.0 M7我试图将AST从一个宇宙转换为另一个宇宙.

case class MacroBridge(context: Context) {
  def toMacroTree(tree: treehugger.forest.Tree): context.universe.Tree = ???
  def fromMacroTree(tree: context.universe.Tree): treehugger.forest.Tree = ???
}
Run Code Online (Sandbox Code Playgroud)

在宏实现中,我可以将其用作:

val bridge = treehugger.MacroBridge(c)
def fromMacroTree(tree: c.universe.Tree): Tree = bridge.fromMacroTree(tree)
Run Code Online (Sandbox Code Playgroud)

但是,这会导致编译器错误:

[error] /scalamacros-getting-started/library/Macros.scala:21: type mismatch;
[error]  found   : c.universe.Tree
[error]  required: bridge.context.universe.Tree
[error]  possible cause: missing arguments for method or constructor
[error]     def fromMacroTree(tree: c.universe.Tree): Tree = bridge.fromMacroTree(tree)
Run Code Online (Sandbox Code Playgroud)

在上面的代码c显然是相同的值bridge.context,但也许是因为它是一个值类型检查器无法检查它.放置通用类型约束没有帮助:

def fromMacroTree[A](tree: A)(implicit ev: A =:= context.universe.Tree): Tree =
Run Code Online (Sandbox Code Playgroud)

在宏中,这仍然导致错误:

[error] /scalamacros-getting-started/library/Macros.scala:21: Cannot prove …
Run Code Online (Sandbox Code Playgroud)

scala path-dependent-type scala-macros

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

创建一个Akka胖罐

我需要创建一个Nutch插件,使用Akka与一些外部应用程序通信.为了做到这一点,我需要将插件打包为胖罐 - 我正在使用sbt-assembly版本0.8.3.

当我尝试运行插件时,我得到了异常

com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka'
Run Code Online (Sandbox Code Playgroud)

好像Akka无法找到reference.conf.这很奇怪,因为sbt-assembly 应该能够正确打包该文件,事实上我可以在创建的jar中看到它的内容.

build.sbt看起来像这样:

import AssemblyKeys._

name := "my-project"

version := "0.1-SNAPSHOT"

scalaVersion := "2.10.0"

resolvers ++= Seq(
  "Central Repo" at "http://repo1.maven.org/maven2",
  "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/",
  "Akka io" at "http://akka.io/repository"
)

libraryDependencies ++= Seq(
  ...,
  "com.typesafe.akka" %% "akka-actor" % "2.1.1",
  "com.typesafe.akka" %% "akka-remote" % "2.1.1"
)

seq(assemblySettings: _*)

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
  {
    case "plugin.xml" …
Run Code Online (Sandbox Code Playgroud)

scala nutch sbt akka sbt-assembly

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

如何更改Scalatra应用程序的"webapp"目录的位置?

默认情况下,Scalatra期望"webapp"目录位于src/main/webapp.怎么可能改成,例如content/doc-root

sbt允许使用以下内容自定义其默认目录:

scalaSource <<= (baseDirectory)(_ / "src")
Run Code Online (Sandbox Code Playgroud)

所以我认为这只是知道使用正确的"配置键"的问题......

scala sbt scalatra scalatra-sbt

5
推荐指数
0
解决办法
953
查看次数

SBT本机打包程序中的多个项目依赖项

我正在使用SBT本机打包程序插件(https://github.com/sbt/sbt-native-packager)来处理由多个模块组成的项目.

在我的SBT设置中,我有:

lazy val settings = packageArchetype.java_application ++ Seq(
  ...
  // Java is required to install this application
  debianPackageDependencies in Debian ++= Seq("java2-runtime"),

  // Include the module JAR in the ZIP file
  mappings in Universal <+= (packageBin in Compile) map { jar =>
    jar -> ("lib/" + jar.getName)
  }
)
Run Code Online (Sandbox Code Playgroud)

问题是生成的ZIP或DEB似乎不包含我的项目的模块依赖项.只有最终模块JAR和其中使用的库,但不包括它所依赖的模块.

你知道我怎么能解决这个问题?

debian scala jar sbt sbt-native-packager

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

Java:Java 6何时可以为最终用户桌面应用程序做好准备?

我正在编写一个用Java 1.5开发的用Swing编写的桌面应用程序.一些用户似乎在使用Mac,但我对Java 6的脚本功能感兴趣(Java 6附带Rhino).Java 6虽然在差不多2年前推出,但似乎并未广泛使用.我也听说Apple仅为Intel 64 Macs提供Java 6.Java 1.5是最后运行的Java吗?

Java 6现在是否已为最终用户桌面应用程序做好准备了?更待何时?

编辑:不要因为我正在使用Swing这个事实而陷入困境.我想知道什么时候Java 6可以被认为是准备黄金时间,而不是UI库的选择.

java macos swing java-6

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

是否有按元素类型过滤和映射集合的内置更优雅的方法?

如果我想缩小,例如,Iterable[A]对于特定类型的所有元素(例如String)我可以做:

as filter { _.isInstanceOf[String] }
Run Code Online (Sandbox Code Playgroud)

但是,显然需要使用它作为Iterable[String]可以通过以下方式完成map:

as filter { _.isInstanceOf[String] } map { _.asInstanceOf[String] }
Run Code Online (Sandbox Code Playgroud)

这很难看.当然我可以用flatMap:

as flatMap[String] { a => 
  if (a.isInstanceOf[String]) 
    Some(a.asInstanceOf[String]) 
  else
    None
}
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否更具可读性!我写了一个函数,narrow可以通过implicit转换使用:

as.narrow(classOf[String])
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个我忽略的更好的内置机制.特别是因为能够将a缩小List[A]到a List[String]而不是Iterable[String]与我的函数一样,这将是很好的.

types scala scala-collections

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

什么时候Scala中的Set少于另一个?

我想比较Scala中两组的基数.由于Scala中的某些东西有时"正常工作",我尝试<在两组之间使用.它似乎经历了,但我无法理解结果.

例:

scala> Set(1,2,3) < Set(1,4)
res20: Boolean = true
Run Code Online (Sandbox Code Playgroud)
  • 它返回了什么?
  • 我在哪里可以阅读API中的这个方法?
  • 为什么它不在任何地方列出scala.collection.immutable.Set

更新:即使集合中元素的顺序(??)似乎也很重要:

scala> Set(2,3,1) < Set(1,3)
res24: Boolean = false

scala> Set(1,2,3) < Set(1,3)
res25: Boolean = true
Run Code Online (Sandbox Code Playgroud)

scala scala-collections

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

Scala:通用隐式转换器?

我想定义一个适用于所有类型的子类型的通用隐式转换器T.例如:

abstract class Price[A] {
  def price(a: Any): Int
}

trait Car
case class Prius(year: Int) extends Car
trait Food
case class FriedChicken() extends Food

object Def {
  implicit def carToPrice[A <: Car](car: A): Price[A] = new Price[A] {
    def price(car: Any) = 100
  }

  implicit def foodToPrice[A <: Food](food: A): Price[A] = new Price[A] {
    def price(food: Any) = 5
  }

  // implicit object PriusPrices extends Price[Prius] {
  //   def price(car: Any) = 100
  // }
  // …
Run Code Online (Sandbox Code Playgroud)

scala implicit typeclass

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

如何使用sbt-native-packager更改通用zip文件名

我在用:

  • 斯卡拉2.10.3
  • sbt 13.2

带插件:

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.3")
Run Code Online (Sandbox Code Playgroud)

我正在使用universal:packgeBin生成通用zip文件并发布到ivy存储库.我想将zip文件名更改project_id_scalaversion_buildVersion.zipproject_id_scalaversion_buildVersion_dist.zip.我该怎么办?

scala sbt sbt-native-packager

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

如何阻止sbt发布pom.xml

最初由fommil在Gitter sbt/sbt频道上询问:

有人知道哪个任务生成pom文件,例如在发布中?我想覆盖它什么都不做.

scala sbt

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