小编Jes*_*per的帖子

如何使用A值作为地图中的关键字将Seq [A]转换为Map [Int,A]?

我有一个Seq类的对象,如下所示:

class A (val key: Int, ...)
Run Code Online (Sandbox Code Playgroud)

现在我想将此转换Seq为a Map,使用key每个对象的值作为键,并将对象本身作为值.所以:

val seq: Seq[A] = ...
val map: Map[Int, A] = ... // How to convert seq to map?
Run Code Online (Sandbox Code Playgroud)

如何在Scala 2.8中高效且优雅地完成这项工作?

scala scala-2.8 scala-collections

37
推荐指数
3
解决办法
4万
查看次数

带有类型参数的注释属性

定义Java接口时,可以使用类型参数声明方法,例如:

public interface ExampleInterface {
    <E extends Enum<E>> Class<E> options();
}
Run Code Online (Sandbox Code Playgroud)

同样的事情在注释中不起作用.例如,这是非法的:

public @interface ExampleAnnotation {
    <E extends Enum<E>> Class<E> options();
}
Run Code Online (Sandbox Code Playgroud)

我可以通过使用原始类型得到我想要的东西Enum:

public @interface ExampleAnnotation {
    @SuppressWarnings("rawtypes")
    Class<? extends Enum> options();
}
Run Code Online (Sandbox Code Playgroud)

究竟是什么原因导致无法使用类型参数声明注释属性?

java generics annotations

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

由yield生成的集合类型

当我for在Scala中评估一个时,我得到一个不可变的IndexedSeq(一个具有类似数组的性能特征的集合,例如高效的随机访问):

scala> val s = for (i <- 0 to 9) yield math.random + i
s: scala.collection.immutable.IndexedSeq[Double] = Vector(0.6127056766832756, 1.7137598183155291, ...
Run Code Online (Sandbox Code Playgroud)

for一个yield总是返回一个IndexedSeq,还是它还可以返回一些其他类型的集合类(LinearSeq例如,a)?如果它还可以返回其他内容,那么什么决定了返回类型,我该如何影响它呢?

我正在使用Scala 2.8.0.RC3.

scala scala-2.8 scala-collections

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

如何隐藏实现助手模板?

假设我在头文件中声明了两个模板函数:

template <typename T> void func1(const T& value);
template <typename T> void func2(const T& value);
Run Code Online (Sandbox Code Playgroud)

并且假设这些函数的实现(也在头文件而不是源文件中,因为它们是模板)使用一些实现辅助函数,它也是一个模板:

template <typename T> void helper(const T& value) {
    // ...
}

template <typename T> void func1(const T& value) {
    // ...
    helper(value);
}

template <typename T> void func2(const T& value) {
    // ...
    helper(value);
}
Run Code Online (Sandbox Code Playgroud)

在我包含头文件的任何源文件中,辅助函数都是可见的.我不希望这样,因为辅助函数只是一个实现细节.有没有办法隐藏辅助功能?

c++ templates

18
推荐指数
3
解决办法
8032
查看次数

何时是Scala中方法所需的返回类型?

Scala编译器通常可以推断方法的返回类型,但在某些情况下需要指定返回类型.例如,递归方法需要指定返回类型.

我注意到有时我得到错误消息"重载方法(methodname)需要返回类型",但是一般规则是必须始终为重载方法指定返回类型(我有一些例子,我没有得到这个错误).

何时需要指定返回类型,对于一般的方法,特别是对于重载方法?

methods scala overloading scala-2.8

12
推荐指数
1
解决办法
5162
查看次数

如何在Scala数组上使用Java Collections.shuffle()?

我有一个我想要随机排列的数组.在Java中,有一个方法Collections.shuffle()可以随机地重新排列List的元素.它也可以在数组上使用:

String[] array = new String[]{"a", "b", "c"};

// Shuffle the array; works because the list returned by Arrays.asList() is backed by the array
Collections.shuffle(Arrays.asList(array));
Run Code Online (Sandbox Code Playgroud)

我尝试在Scala数组上使用它,但Scala解释器回答了一个冗长的答案:

scala> val a = Array("a", "b", "c")
a: Array[java.lang.String] = Array(a, b, c)

scala> java.util.Collections.shuffle(java.util.Arrays.asList(a))
<console>:6: warning: I'm seeing an array passed into a Java vararg.
I assume that the elements of this array should be passed as individual arguments to the vararg.
Therefore I follow the array with a `: _*', to mark …
Run Code Online (Sandbox Code Playgroud)

arrays collections scala shuffle scala-collections

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

Java的反应性扩展

是否有相当于Java 的Reactive Extensions(.NET)?

关于Rx(Reactive Extensions)

Rx是一个使用可观察集合组成异步和基于事件的程序的库.

我知道规则引擎,比如来自JBOSS的Drools,但还有其他一些更接近Microsoft .NET方法的方法吗?

.net java linq system.reactive

11
推荐指数
2
解决办法
4495
查看次数

为什么Numeric的行为与Ordered不同?

Scala有一个号码,你可以为类型类使用,如性状Ordered,并Numeric在包装中scala.math.

例如,我可以使用Ordered如下方法编写泛型方法:

def f[T <% Ordered[T]](a: T, b: T) = if (a < b) a else b
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情Numeric,但这不起作用:

def g[T <% Numeric[T]](a: T, b: T) = a * b
Run Code Online (Sandbox Code Playgroud)

为什么Ordered和之间存在明显的差异Numeric

我知道还有其他方法可以做到这一点,以下方法将起作用(使用上下文绑定):

def g[T : Numeric](a: T, b: T) = implicitly[Numeric[T]].times(a, b)
Run Code Online (Sandbox Code Playgroud)

但这看起来比仅仅能够*乘以两个数字更复杂.为什么Numeric特征不包括类似的方法*,而Ordered包括类似的方法<

我知道Ordering你也可以用同样的方式使用Numeric,另见这个答案:

def f[A : Ordering](a: A, b: A) …
Run Code Online (Sandbox Code Playgroud)

scala typeclass

10
推荐指数
3
解决办法
293
查看次数

为什么将成员变量的擦除警告声明为元组?

看看这个Scala类:

class Example {
  val (x, y): (Int, Int) = (1, 2)
}
Run Code Online (Sandbox Code Playgroud)

编译这会导致警告:

Example.scala:2: warning: non variable type-argument Int in type pattern
               (Int, Int) is unchecked since it is eliminated by erasure
    val (x, y): (Int, Int) = (1, 2)
                ^
Run Code Online (Sandbox Code Playgroud)

删除显式类型注释会消除此警告:

class Example {
  val (x, y) = (1, 2)
}
Run Code Online (Sandbox Code Playgroud)

为什么我会收到警告,为什么删除显式类型注释会删除它?据我所知,没有任何真正的变化,x并且y仍然是Int没有类型注释的类型.

scala compiler-warnings type-erasure

9
推荐指数
2
解决办法
481
查看次数

System.out.println()与Java返回之间的差异

我试图了解在方法中使用System.out.println()vs的好处和好处return blah.

它似乎System.out.println()用于显示静态信息,并且return是从该方法返回的值.然而,我正在看下面的例子,其中一个函数在System.out.println()语句中使用

System.out.println(name.substring(1, 3));
Run Code Online (Sandbox Code Playgroud)

什么时候使用System.out.println()return.是否return可以在以后使用另一段代码,而System.out.println()不能?

java return return-value system.out

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