Scala的StringLike有这个方法 replaceAllLiterally(literal: String, replacement: String): String
这似乎与使用该方法的Java的String非常相似String replace(CharSequence target, CharSequence replacement).
是否有理由使用Scala版本?
(不进行正则表达式编译步骤似乎可以使Java的版本更快,但我还没有对其进行基准测试)
许多Java资源使用示例如下所示:
Resource r = openResource();
try {
// use resource
} finally {
r.close();
}
Run Code Online (Sandbox Code Playgroud)
声明r必须在try-clause 之外才能在finally-clause中显示,但这也使得它看起来像是一个潜在的竞争条件:如果在openResource()-call和进入try-clause 之间存在线程中断怎么办?
这是否意味着在该场景中资源实际上并未关闭?
或者Java是否保证try-finally封面r"完全",尽管语法看起来不像?
或者我必须写:
Resource r = null;
try {
r = openResource();
// use resource
} finally {
if (r != null) r.close();
}
Run Code Online (Sandbox Code Playgroud)
为了防止线程中断?
我可以通过发出以下 CLI 命令列出我的所有 Spot 实例:
aws ec2 describe-instances --filter Name="instance-lifecycle",Values="spot"
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能显示我所有的not Spot 实例呢?这些都不起作用:
aws ec2 describe-instances --filter Name="instance-lifecycle",Values=""
aws ec2 describe-instances --filter Name="instance-lifecycle",Values="?"
Run Code Online (Sandbox Code Playgroud)
(instance-lifecycle对于非 Spot 实例, 为空 / null,对于spot-instance-request-id)
我有几个SBT 0.13/Play 2.2项目(网站).它们都是多模块,因为它们共享一些共同的功能.这使得他们的项目配置文件既复杂又几乎相同,但并不完全相同.
我希望能够在项目中尽可能多地共享这些配置文件(频繁的播放更新使得5个以上的网站保持最新的王室痛苦,更不用说所有几乎完全相同但不断发展的依赖列表项目).
build.properties和plugins.sbt在各个项目中是相同的,可以通过简单的脚本覆盖.大.
Build.scala比较棘手 - 我想介绍一个像这样的共享基类:
abstract class MyBuildBase extends Build { ... }
Run Code Online (Sandbox Code Playgroud)
在Build.scala中:
object ApplicationBuild extends MyBuildBuild { ... }
Run Code Online (Sandbox Code Playgroud)
为了使其具有任何意义,需要跨项目共享MyBuildBase.scala.这可以通过svn:external来完成,它在目录上运行.这意味着我需要在编译Build.scala时以某种方式使这个共享目录可访问(否则sbt会大声抱怨).
阅读http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Classpaths.html和http://www.scala-sbt.org/0.13.0/docs/Getting-Started/Full -Def.html似乎这应该是可能的.
然而,这是非常不清楚我居然把什么项目/工程/ Build.scala文件实际上做到这一点-我无法找到的一个例子"这是旨在建立一个SBT构建文件和包括SBT构建文件构建中的一些额外的源文件".
有什么建议?
我有一个字符串格式化函数fmt(v:Any): String,需要根据运行时类型执行不同的操作v.所以它看起来像:
def fmt(v:Any): String = {
v match {
case a: Int => "Int: " + a
case a: String => "\"" + a + "\""
case a => throw new IllegalArgumentException(s"??? '$a', ${a.getClass.getCanonicalName}?!")
}
}
Run Code Online (Sandbox Code Playgroud)
IllegalArgumentException("??? 'myVal', scala.Enumeration.Val?!")当我传入scala枚举值时抛出一个.但是,添加一个
case a: scala.Enumeration.Val => "Hello enum"
Run Code Online (Sandbox Code Playgroud)
不编译:object枚举不是包scala的成员注意:class Enumeration存在,但它没有伴随对象.
如何检测传入的实例是否为scala枚举值?
if (a.getClass.getCanonicalName == "scala.Enumeration.Val") 应该工作,但感觉就像一个黑客 - 是否有任何实际类型模式匹配我可以做?