小编fom*_*mil的帖子

Scala相当于Java的Number

我正在尝试为数字域类型构建一个类型层次结构.例如Year是一个Int(这是一个Number),一个Percentage是一Double,这是一个Number等我需要的层次结构,这样我可以调用toInttoDouble上的值.

但是,原始数字类型的Scala类型层次结构除了之外没有共同的祖先AnyVal.这不包含to{Int, Double}我需要的功能.

我能找到的最接近的类型是Numeric[T],它似乎主要存在于某些编译器技巧中.

在Java中,所有数字都来自Number(包括任意精度的数字).如何定义一个满足Scala中数值类型对象的接口?

我正在用鸭子打字来攻击它:

Any {
  def toInt: Int
  def toDouble: Double
}
Run Code Online (Sandbox Code Playgroud)

这不仅啰嗦,而且还会产生运行时反射成本.有更好的吗?

scala

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

如何在Maven编译期间忽略Java Source目录?

我正在尝试使用Lombok Maven插件来确保在使用Lombok时正确创建Javadoc .

Lombok Maven在编译之前引入了一个新的代码生成目标.在我的配置中,我的sourceDirectory(带有Lombok注释的Java src/main/java)被处理为创建Java(没有Lombok注释)target/generated-sources/delombok.

但是,sourceDirectory现在每个文件都有一个相应的(同名)文件target/generated-sources/delombok,导致由于重复的类导致编译失败.

如何告诉Java编译器忽略源代码sourceDirectory

请注意,默认的Lombok Maven配置会让开发人员将Java(带有Lombok注释)放在src/main/lombok文件夹中而不是src/main/java.但是,我不希望这样做,因为它混淆了IDE,我的代码编译得很好(如果我删除了Maven插件).

另请注意,简单地重新定义sourceDirectory也会破坏IDE(他们不再知道在哪里可以找到Java源代码!).

java maven lombok

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

在Scala中重新使用守卫

我经常发现自己想要在scala中重用警卫评估的结果,例如

blah match {
  case Blah(a, b) if expensive(a) < 10 =>
     expensive(a)
  case _ => b
}
Run Code Online (Sandbox Code Playgroud)

这可能是使用一些鲜为人知的咒语吗?(放在@上面expensive不起作用)

这可能很快就会实现吗?

scala

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

詹金斯杀死所有子进程

我有一个运行bash脚本的jenkins作业.

在bash脚本中,我有效地执行了两个操作,例如

java ApplicationA &
PID_A=$!
java ApplicationB
kill $PID_A   
Run Code Online (Sandbox Code Playgroud)

但是如果手动中止作业,则ApplicationA保持活动状态(可以ps -ef在节点机器上看到).我不能使用陷印等,因为如果jenkins发送9信号(陷阱不起作用9),这将不起作用.

如果这个工作可以被配置为简单地杀死它产生的所有进程,那将是理想的,我该怎么做?

jenkins

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

如何使用sbt和sbt-release发布胖JAR(具有依赖项的JAR)?

我需要为我的一个子项目构建一个jar,包括依赖项,以便它可以用作javaagent.

我有一个多模块sbt项目,这个特定的模块是最低级别的(它也是纯Java).

我可以(例如使用sbt-onejar,sbt-proguardsbt assembly)覆盖最低级别模块的打包方式吗?

看起来这些工具确实设计为后发布步骤,但我确实需要一个(替换或附加)已发布的工件来包含依赖项(但仅限于此一个模块).

更新: 发布 sbt-assembly是单个项目的说明,并不容易转换为多项目.

deployment jar sbt sbt-assembly

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

如何让我的所有docker容器都使用我的代理?

我在Debian Jessie上运行docker,这是一个公司代理的背后.为了能够下载docker图像,我需要将以下内容添加到我的/etc/defaults/docker

http_proxy="http://localhost:3128/"
Run Code Online (Sandbox Code Playgroud)

我可以确认这是有效的.

但是,为了能够从我的容器中访问interwebz,我需要启动所有会话,--net host然后设置这些env变量:

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望容器不需要主机网络,而不知道代理(即容器中端口20,80,443的所有出站调用都通过主机的代理端口).那可能吗?

如果失败了,是否可以进行站点设置,这将确保这些env变量在本地设置但从未作为图像的一部分导出?我知道我可以用这些东西传递这些东西--env http_proxy=...,但这很笨重.我希望它能够为系统上的所有用户工作,而不必使用别名.

(免责声明:我在https://superuser.com/posts/890196上问了这个问题,但docker问题的主页目前有点含糊不清).

proxy docker

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

如何使用无形状迭代联产品中的所有产品类型?

假设我有一个副产品(一个密封的特性),如

sealed trait Traity
case object Foo extends Traity
case class Bar() extends Traity
case class Baz() extends Traity
Run Code Online (Sandbox Code Playgroud)

使用无形,我可以将多态函数应用于特定实例,但我想要做的是将零参数(无实例)多态函数应用于所有产品(即案例类和案例对象).我不知道语法是什么样的,但在概念上是这样的:

object mypoly extends Poly1 {
  implicit def traity[T <: Traity] = when[T]( getClass[T].toString )
}

iterate[Traity](mypoly) // gives List("Foo", "Bar", "Baz")
Run Code Online (Sandbox Code Playgroud)

适合我的目的.

scala shapeless

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

在Scala中作为注释参数的注释数组

将数组作为参数传递给注释有很多问题,这不是那些的愚蠢.

我想使用一个Java-land注释,它将一个注释数组作为参数,例如

@ManagedOperation
@ManagedOperationParameters({
  @ManagedOperationParameter(name="start"),
  @ManagedOperationParameter(name="end")
})
def stuff(start: String, end: String): Unit = ???
Run Code Online (Sandbox Code Playgroud)

但这不是Scala中的有效语法,也不是

@ManagedOperation
@ManagedOperationParameters(Array(
  @ManagedOperationParameter(name="start"),
  @ManagedOperationParameter(name="end")
))
def stuff(start: String, end: String): Unit = ???
Run Code Online (Sandbox Code Playgroud)

那么,如果可能的话,这样做的正确方法是什么?

顺便说一句,我甚至检查了所有github以查看是否有任何Scala开发人员正在使用此(Spring JMX)注释.

spring annotations scala

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

如何添加自定义资源目录来测试类路径而不复制里面的文件?

当我运行我的测试时,我的特殊资源目录的内容special-resources被复制到该target/classes目录.我有类似的东西

unmanagedResourceDirectories in Compile += baseDirectory.value / "special-resources",
Run Code Online (Sandbox Code Playgroud)

但我不想将这些资源复制到target目录中,但我希望它们位于分叉java进程的类路径上(例如用于测试).

我试过用

unmanagedClasspath in Compile += baseDirectory.value / "special-resources",
Run Code Online (Sandbox Code Playgroud)

但资源不可用.

如何在不必复制文件的情况下将资源目录添加到类路径?或者,或者,如何设置sbt以不将资源复制到目标目录?

sbt

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

默认情况下禁用调试时如何运行sbt测试以进行调试?

如果我想在启用调试的情况下运行测试(或主要),我发现使用特殊标志重新启动sbt令人难以置信的尴尬.如果main或test通常位于分叉的JVM中,那也很痛苦:

如何在命令行上给出-jvm-debug时在test中设置fork?

有没有简单的方法来有条件地做了run,test,test-quicktest-only并要求调试在派生进程中启用?例如,语法如test-only -jdb

我真的不想写自己的Tasks来做这件事......维持它们将成为一场噩梦.但我想这会允许语法module/jdb:test-only

debugging scala sbt

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