似乎Vector
Scala收集派对迟到了,所有有影响力的博客帖子已经离开了.
在Java中ArrayList
是默认的集合 - 我可能会使用,LinkedList
但只有当我通过算法并且足够小心地进行优化时才会使用.在Scala中,我应该使用Vector
我的默认设置Seq
,还是尝试在List
实际上更合适时使用?
ScalaTest的输出是彩色的,以区分不同的状态,但这些最终作为控制代码和
[34m Annoying garbage
Run Code Online (Sandbox Code Playgroud)
有没有办法说服Eclipse控制台尊重或忽略这些序列,或插入一个视图?
Scala 2.10带来了除了提供JVM(或者我猜CLR)之外的反射.
我们还有什么特别值得期待的,它将如何在平台上得到改善?
例如,是否会有一个类反映语言在字段和访问器方法之间的可转换性,以便我可以迭代对象的属性?
我有一个Java类,我已经移植到Scala,但仍然有一些Java子类实现抽象功能.
最初的Java有
public abstract class Base {
...
protected abstract Foo getFoo();
}
Run Code Online (Sandbox Code Playgroud)
这被延长了
public class Fred extends Base {
...
protected Foo getFoo() {
return foo;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我将Base移植到Scala
class Base {
...
protected def getFoo(): Foo
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说
无法降低继承方法的可见性......
现在我明白了,因为它的规则略有不同,Scala倾向于在编译器中强制实现可见性而不是字节码,因此getFoo在javap类中被标记为public.但
protected[packagename] def getFoo()
Run Code Online (Sandbox Code Playgroud)
仍然没有生成pukka(Java)保护方法,虽然我认为可见性应该是相同的.
有没有办法说服Scala编译器发出一个Java会认为受保护的方法?
我想使用顶层函数加载资源Class.getResourceAsStream()
.
有没有办法获得对顶层函数将被编译成的类的引用,以便我可以编写,例如
val myThing = readFromStream(MYCLASS.getResourceAsStream(...))
Run Code Online (Sandbox Code Playgroud) 我想在泛型类型T上编写扩展方法,其中匹配类型约束方法参数.
我希望这个编译:
"Hello".thing("world")
Run Code Online (Sandbox Code Playgroud)
但不是这个,因为42不是字符串:
"Hello".thing(42)
Run Code Online (Sandbox Code Playgroud)
这个定义不起作用,因为T满足 Any
fun <T> T.thing(p: T) {}
Run Code Online (Sandbox Code Playgroud) 我对Java 8上的Guava感到非常满意 - 在向Streams迁移顺序代码时是否有任何性能优势或陷阱?
我一直在努力回答是否有一个标准的Scala函数用于运行超时的块?,如果在Future中抛出异常,则会遇到问题.
def runWithTimeout[T](timeoutMs: Long)(f: => T) : Option[T] = {
awaitAll(timeoutMs, future(f)).head.asInstanceOf[Option[T]]
}
Run Code Online (Sandbox Code Playgroud)
以便
runWithTimeout(50) { "result" } should equal (Some("result"))
runWithTimeout(50) { Thread.sleep(100); "result" } should equal (None)
Run Code Online (Sandbox Code Playgroud)
但是如果我在我的块中抛出一个异常它不会泄漏,但是被吞下 - 所以下面的代码失败了"..没有抛出异常"
intercept[Exception] {
runWithTimeout(50) { throw new Exception("deliberate") }
}.getMessage should equal("deliberate")
Run Code Online (Sandbox Code Playgroud)
Syserr有一条带有消息的堆栈跟踪
<function0>: caught java.lang.Exception: deliberate
Run Code Online (Sandbox Code Playgroud)
但我无法找到Scala运行时中打印的位置.
除了在另一个块中包装f以捕获异常并在抛出时传播它们,有没有办法说服awaitAll和/或Future抛出?
如果我想将我的Kotlin集合收集到stdlib中没有内置的东西,我该怎么做?
我正在尝试编写一个需要两个Comparable
s 的泛型max函数.
到目前为止我有
public static <T extends Comparable<?>> T max(T a, T b) {
if (a == null) {
if (b == null) return a;
else return b;
}
if (b == null)
return a;
return a.compareTo(b) > 0 ? a : b;
}
Run Code Online (Sandbox Code Playgroud)
这无法编译
The method compareTo(capture#5-of ?) in the type Comparable<capture#5-of ?> is not applicable for the arguments (T)
Run Code Online (Sandbox Code Playgroud)
我认为这是说,?
in Comparable<?>
可以被解释为参数a的一种类型,而参数b的另一种类型,因此它们无法进行比较.
我如何从这个洞中挖掘自己?
scala ×4
java ×3
kotlin ×3
generics ×2
actor ×1
ansi ×1
collections ×1
comparable ×1
concurrency ×1
console ×1
eclipse ×1
guava ×1
java-8 ×1
performance ×1
protected ×1
reflection ×1
vector ×1
visibility ×1