我有这种情况:
class Column {
}
trait Table {
lazy val columns: List[Column] = ....
}
class MyTable extends Table {
val column1 = new Column()
val column2 = new Column()
}
Run Code Online (Sandbox Code Playgroud)
我想在编译时获取派生类中定义的列的列表.
我已经能够通过使用运行时反射来做到,但我听说它在Android和ProGuard中可能会有问题.所以,如果可能的话,我想在编译时这样做.
https://groups.google.com/forum/#!topic/scala-on-android/Q0E_OMYqE0A
这是我的运行时反射实现:
trait Table {
lazy val columns: List[Column] = {
import scala.reflect.runtime.universe._
val rm = scala.reflect.runtime.currentMirror
val columns = rm.classSymbol(this.getClass).toType.members.collect {
case m: MethodSymbol if m.isGetter && m.returnType <:< typeOf[Column] => m
}
val espejo = rm.reflect(this)
(for (col <- columns) yield
espejo.reflectMethod(col).apply().asInstanceOf[Column]).toList
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Gradle 自动化我的项目。
我有几个应用程序和一个库项目。仔细阅读官方文档后,这是我的 build.gradle 的简化视图:
buildscript {
repositories {
mavenCentral()
maven {
url "http://saturday06.github.io/gradle-android-scala-plugin/repository/snapshot"
}
}
dependencies {
// 0.8.3 con Gradle 1.10
classpath 'org.gradle.api.plugins:gradle-android-plugin:1.2.1'
}
}
apply plugin: 'idea'
project(':MyApp') {
ext.apl = true
}
project(':MyLibrary') {
ext.apl = false
}
subprojects {
if (project.apl) {
apply plugin: 'android'
dependencies {
compile 'ch.acra:acra:4.5.0'
}
}
if (project.scala) {
apply plugin: 'android-scala'
scala {
target "jvm-1.7"
addparams '-feature'
}
} else {
apply plugin: 'android-library'
}
android …
Run Code Online (Sandbox Code Playgroud) 正如你们许多人所知,Gradle守护进程可以大大加速Gradle.
我有一个multimodule构建并使用Gradle包装器.
从命令行运行时:
gradlew :MyModule:test
Run Code Online (Sandbox Code Playgroud)
Gradle花了几秒钟分析我的模块.如果我再次发射,它会一次又一次地消耗宝贵的时间.
我正在使用Gradle 1.12.
我试过设置添加这一行:
org.gradle.daemon=true
Run Code Online (Sandbox Code Playgroud)
到local.properties,但没有运气.
我不知道是否必须更改myHome/.gradle/gradle.properties或其他文件.
我想为我班级的每个val和def创建ScalaDoc条目.问题是vals位于模式定义中,并且不知道如何使用/** */
语法.
例:
class C(id: String) {
val (part1, part2) = {
.....
(expr1, expr2)
}
}
Run Code Online (Sandbox Code Playgroud)
我如何记录part1和part2?
在阅读有关ScalaDoc的文档之前,我已阅读过.
我正在将项目从Apache Maven迁移到sbt.
我的项目有很多依赖(超过200),有时,一个类可以复制,可能会导致奇怪的效果.
在Maven中,我一直在使用maven-duplicate-finder-plugin来检测这种情况.
我能看到的唯一解决方案是使用sbt-assembly插件生成一个大jar ,并配置为抱怨重复的类.我还没有尝试过.
我怎么能用SBT做到这一点?
参考文献:
我有这组重载函数:
case class A[T](t: T)
object C {
def dump(a: A[String], s: String) = ....
def dump(a: A[Int], s: Int) = ....
def dump(a: A[Double], s: Double) = ....
}
Run Code Online (Sandbox Code Playgroud)
并有这个通用的方法:
class B {
def dump[T](a: A[T], t: T) = C.dump(a, t)
}
Run Code Online (Sandbox Code Playgroud)
它不编译,因为Scala编译器与不同的重载混淆.这样做的正确方法是什么?
使用 Apache 2.4 通过 ReWriteRule (mod_rewrite) 进行代理时,无法控制超时。
<VirtualHost "*:443">
ServerName xxxx
Use ssl
RewriteEngine On
RewriteRule (.*/wms|/openlayers3/.*) http://localhost:8080$1 [P,L]
RewriteRule .* [F]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我尝试过但没有成功:
Timeout 400
ProxyTimeout 400
<Proxy "http://localhost:8080/">
ProxySet connectiontimeout=100 timeout=400
</Proxy>
Run Code Online (Sandbox Code Playgroud)
ProxyPass "/" "http://localhost:8080" connectiontimeout=100 timeout=400
无论我使用上述哪个指令,超时始终为 1 分钟。
我正在尝试新的声明性管道语法.
我想知道,当例如参数具有无效值时,我如何中止管道的所有阶段和步骤.
我可以when
在每个阶段添加一个子句,但这对我来说不是最佳选择.有没有更好的方法呢?
正如许多人所知,Scala XML文字允许以简单的方式嵌入代码中,XML文字.通过使用{}
符号,可以嵌入可变信息.
例:
val something = "SOMETHING"
val xml = <elem>{hello}</elem>
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在评论中嵌入可变信息.
这不起作用:
val xml = <elem><!-- A comment with {something} variable--></elem>
Run Code Online (Sandbox Code Playgroud) 我需要在Ammonite脚本中导入sikulixapi。我可以这样做。
因此,如果我从Ammonite的交互式控制台中执行以下操作:
@ import $ivy.`com.sikulix:sikulixapi:1.1.0`
https://repo1.maven.org/maven2/com/sikulix/sikulixapi/1.1.0/sikulixapi-1.1.0.pom
100,0% [##########] 5,3 KiB (37,6 KiB / s)
https://repo1.maven.org/maven2/com/nativelibs4java/bridj/0.6.2/bridj-0.6.2.pom
100,0% [##########] 18,1 KiB (226,0 KiB / s)
https://repo1.maven.org/maven2/com/sikulix/sikulixlibslux/1.1.0/sikulixlibslux-1.1.0.pom
100,0% [##########] 2,6 KiB (20,8 KiB / s)
https://repo1.maven.org/maven2/org/swinglabs/swing-layout/1.0.3/swing-layout-1.0.3.pom
100,0% [##########] 858 B (6,5 KiB / s)
https://repo1.maven.org/maven2/com/nativelibs4java/nativelibs4java-parent/1.8/nativelibs4j…
100,0% [##########] 16,8 KiB (204,3 KiB / s)
Failed to resolve ivy dependencies:
jxgrabkey:jxgrabkey:1.0
not found: /home/jenkins/.ivy2/local/jxgrabkey/jxgrabkey/1.0/ivys/ivy.xml
not found: https://repo1.maven.org/maven2/jxgrabkey/jxgrabkey/1.0/jxgrabkey-1.0.pom
Run Code Online (Sandbox Code Playgroud)
但是jxgrabkey确实存在于Maven中。
这也失败了:
@ import $ivy.`jxgrabkey:jxgrabkey:1.0`
Failed to resolve ivy dependencies:abkey/jxgrabkey/1.0/jxgrabkey-1.0.pom.sha1
Run Code Online (Sandbox Code Playgroud)
我没有使用任何HTTP代理。
sikulixapi的其他版本有其他问题:
@ import …
Run Code Online (Sandbox Code Playgroud) 为什么在REPL中这个表达式失败:
List("a", "b").foreach { System.out.println(s"Valor=$_") }
Run Code Online (Sandbox Code Playgroud)
有这个错误:
<console>:1: error: unclosed string literal
Run Code Online (Sandbox Code Playgroud)
而另一个成功:
List("a", "b").foreach { x => System.out.println(s"Valor=$x") }
Run Code Online (Sandbox Code Playgroud)
我怀疑不支持"_"变量.
这是一个bug还是设计?
我有一个需要创造大量就业机会的 Pod。我想共享一个只读文件夹。我该怎么做?
我可以想象的几个想法(我是 Kubernetes 的新手):
kubectl cp
将基础 Pod 之间的数据复制到作业中的 Pod。对此更好的解决方案是什么?