我如何解决两个与路径相关的类型的等价,我知道它们是相同但编译器没有?
使用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) 我需要创建一个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) 默认情况下,Scalatra期望"webapp"目录位于src/main/webapp.怎么可能改成,例如content/doc-root?
sbt允许使用以下内容自定义其默认目录:
scalaSource <<= (baseDirectory)(_ / "src")
Run Code Online (Sandbox Code Playgroud)
所以我认为这只是知道使用正确的"配置键"的问题......
我正在使用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和其中使用的库,但不包括它所依赖的模块.
你知道我怎么能解决这个问题?
我正在编写一个用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库的选择.
如果我想缩小,例如,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]与我的函数一样,这将是很好的.
我想比较Scala中两组的基数.由于Scala中的某些东西有时"正常工作",我尝试<在两组之间使用.它似乎经历了,但我无法理解结果.
例:
scala> Set(1,2,3) < Set(1,4)
res20: Boolean = true
Run Code Online (Sandbox Code Playgroud)
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) 我想定义一个适用于所有类型的子类型的通用隐式转换器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) 我在用:
带插件:
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.zip为project_id_scalaversion_buildVersion_dist.zip.我该怎么办?
最初由fommil在Gitter sbt/sbt频道上询问:
有人知道哪个任务生成pom文件,例如在发布中?我想覆盖它什么都不做.