当一个case类有很多字段并且它们的名字很长时,通常最好在每行中写下每个字段,如:
case class Person (
name: String,
age: Int
)
Run Code Online (Sandbox Code Playgroud)
这类似于C/C++ struct定义,即使案例类变大,也完全可读.但IntelliJ IDEA的默认Scala插件会自动更改其缩进:
case class Person (
name: String,
age: Int
)
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪,但Scala风格指南没有提到任何关于案例类缩进的内容.
我在IDE设置中找不到任何可以改变此行为的内容.是否有一个选项可以使自动缩进像我上面描述的那样工作或禁用案例类的自动缩进?
Java 8引入了一个类似Scala的Stream的Stream类,这是一个功能强大的惰性结构,使用它可以非常简洁地执行这样的操作:
def from(n: Int): Stream[Int] = n #:: from(n+1)
def sieve(s: Stream[Int]): Stream[Int] = {
s.head #:: sieve(s.tail filter (_ % s.head != 0))
}
val primes = sieve(from(2))
primes takeWhile(_ < 1000) print // prints all primes less than 1000
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能在Java 8中这样做,所以我写了这样的东西:
IntStream from(int n) {
return IntStream.iterate(n, m -> m + 1);
}
IntStream sieve(IntStream s) {
int head = s.findFirst().getAsInt();
return IntStream.concat(IntStream.of(head), sieve(s.skip(1).filter(n -> n % head != 0)));
}
IntStream primes …Run Code Online (Sandbox Code Playgroud) 我正在研究具有内部和外部依赖关系的多个Gradle项目,到目前为止,我很高兴感谢Gradle的依赖关系管理,我可以修改库项目而不会影响使用该库的每个应用程序.
当我需要修改库项目并使用使用它的应用程序项目对其进行测试时,我需要执行以下操作,
build.properties以引用新版本的库项目所以它现在变得非常简洁.我可以配置IntelliJ IDEA吗?
pom.xml.遗憾的是,IntelliJ的JetGradle插件似乎并不了解Gradle子项目.
build.properties依赖项是我的子项目时,从本地快照读取依赖项,否则从Gradle存储库下载它们谢谢.
我正在尝试获取另一个脚本的输出,使用Python subprocess.Popen如下
process = Popen(command, stdout=PIPE, shell=True)
exitcode = process.wait()
output = process.stdout.read() # hangs here
Run Code Online (Sandbox Code Playgroud)
它挂在第三行,只有当我将它作为python脚本运行时,我无法在python shell中重现它.
另一个脚本只打印几个单词,我假设它不是缓冲区问题.
有谁知道我在做错了什么?
我正在使用杰克逊,并希望打印JSON,使得数组中的每个元素都会进入每一行,例如:
{
"foo" : "bar",
"blah" : [
1,
2,
3
]
}
设置为SerializationFeature.INDENT_OUTPUTtrue只会为对象字段而不是数组元素插入换行符,而是以这种方式打印对象:
{
"foo" : "bar",
"blah" : [1, 2, 3]
}
有谁知道如何实现这一目标?谢谢!
我正在构建一个实用程序库,可以与1.0,1.1,1.2版本的Apache Spark一起使用.
由于它们都是二进制向后兼容的,我想让用户决定使用哪个spark版本(通过手动添加spark-core首选版本作为依赖项和我的库),并且不要在库的POM中强加任何版本限制.否则,它将使用户依赖驱逐警告骚扰用户.
是否可以在不更改任何编译行为的情况下使sbt在已发布的POM中省略库依赖项?
使用HDFS或HFTP URI方案(例如hdfs://namenode/path/to/file),我可以访问HDFS集群而无需其XML配置文件.运行shell命令就像当它是非常方便的hdfs dfs -get,hadoop distcp或者像星火读取文件sc.hadoopFile(),因为我没有为所有相关的HDFS集群,那些代码可能会运行的所有节点复制和管理XML文件.
这种方法的一个缺点是我必须使用活动的NameNode的主机名,否则Hadoop会抛出一个抱怨NN处于待机状态的异常.
通常的解决方法是尝试一个,然后尝试另一个,如果捕获到任何异常,或直接连接到ZooKeeper并使用protobuf解析二进制数据.
与(例如)mysql的loadbalance URI或ZooKeeper的连接字符串相比,这两种方法都很麻烦,我可以用逗号分隔URI中的所有主机,驱动程序会自动找到要与之通信的节点.
假设我有主动和备用的namenode主机nn1和nn2.引用HDFS特定路径的最简单方法是:
hdfs,hadoop虽然JVM会将SIGTERM和类似信号转换为关闭挂钩,但许多服务关闭脚本使用TCP端口启动关闭.(例如Tomcat的关闭端口,Java Service Wrapper,JBoss的管理接口等)
所以我认为使用信号和关机挂钩来优雅地关闭java服务是不鼓励的,直到我发现Play!框架是使用关闭挂钩来管理服务生命周期,并且生成的启动脚本play dist假定信号将被发送到JVM的PID.
我知道信号是依赖于平台的,并且使用TCP端口是一种以跨平台方式管理服务的简单且可扩展的方式,但我想知道它是多么安全以及我需要考虑哪些风险,当我依赖在SIGTERM和关闭挂钩上作为服务关闭的主要方法.
以下是我的spark-defaults.conf和输出spark-shell
$ cat conf/spark-defaults.conf
spark.master mesos://172.16.**.***:5050
spark.eventLog.enabled false
spark.broadcast.compress false
spark.driver.memory 4g
spark.executor.memory 4g
spark.executor.instances 1
$ bin/spark-shell
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Using Spark's repl log4j profile: org/apache/spark/log4j-defaults-repl.properties
To adjust logging level use sc.setLogLevel("INFO")
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.5.2
/_/
Using Scala …Run Code Online (Sandbox Code Playgroud) 我正在用Java编写Web应用程序并使用SLF4J进行日志记录.
我已经厌倦了为每个使用日志记录的类编写以下行:
private static final Logger logger = LoggerFactory.getLogger(ThisClassName.class);
Run Code Online (Sandbox Code Playgroud)
为了避免冗余代码,我在想类似的东西
interface Loggable {
Logger logger();
}
Run Code Online (Sandbox Code Playgroud)
并且每个类都可以实现这个接口然后像AOP这样的魔术插入LoggerFactory部件.
有没有人实现这个或知道如何实现这一目标?
谢谢!
在许多其他语言中,我们可以创建通用的异步可迭代类型,例如Go 中的Observable<T>Rx 变体chan T。
Julia 的协程抽象Task是一个类似的构造,可以在(轻量级)线程之间传递对象。Julia 是否有方法来注释这些对象的类型?
我想创建一个接受 aTask作为参数的函数,并且能够表达任务发出的对象的类型。例如,如果Task是泛型类型,我会想象:
function foo(socket::Task{String})
for word in socket
println(word)
end
end
Run Code Online (Sandbox Code Playgroud)
for更一般地说,是否存在可使用(或使用start//next的其他方法)进行迭代的对象的抽象类型,done以便我可以在函数签名中进行注释?
我想知道这是否:
object Foo {
val regex = "some complex regex".r
def foo() {
// use regex
}
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
object Foo {
def foo() {
val regex = "some complex regex".r
// use regex
}
}
Run Code Online (Sandbox Code Playgroud)
将有任何性能差异.即,scala编译器会识别它"some complex regex".r是一个常量并缓存它,这样它每次都不会重新编译吗?
scala ×5
java ×4
apache-spark ×2
case-class ×1
gradle ×1
hadoop ×1
hang ×1
hdfs ×1
hoisting ×1
indentation ×1
jackson ×1
java-8 ×1
java-stream ×1
json ×1
julia ×1
jvm ×1
log4j ×1
mesos ×1
optimization ×1
pom.xml ×1
popen ×1
python ×1
sbt ×1
sieve ×1
signals ×1
slf4j ×1
stdout ×1
subprocess ×1
uri ×1