小编Mik*_*ike的帖子

MutableList和ListBuffer之间的区别

Scala MutableListListBuffer类之间有什么区别scala.collection.mutable?你什么时候使用一个与另一个?

我的用例是一个线性序列,我可以有效地删除第一个元素,prepend和append.什么是最好的结构?

scala scala-collections

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

查找所有含义

在Scala中是否有一种方法可以在我的代码中找到并显示implicits的所有用法,或者在没有启用implicits的情况下进行编译(因此我遇到了编译错误)?我希望找到我无意中在内循环中分配额外内存的地方.

scala

17
推荐指数
2
解决办法
1529
查看次数

从Java继承时如何在Scala中引用受保护的内部类(仅限字节代码)

我正在编写一个Scala类来继承Java类,我必须覆盖一个将受保护的Java内部类作为参数的方法.Java依赖是一个没有源代码的jar.

我有与https://issues.scala-lang.org/browse/SI-3120中完全相同的设置,除了我没有可用的Java源代码,因此scalac只通过查看它来了解Java依赖关系字节代码(在jar或类文件中).

这基本上就是我要做的事情:

// javapkg/JavaSuperClass.java
package javapkg;
public class JavaSuperClass {
    protected class JavaInnerClass {
    }
    public void method(JavaInnerClass javaInnerclass) {
        System.out.println("hello");
    }
}

// scalapkg/ScalaSubClass.scala
package scalapkg
import javapkg.JavaSuperClass
class ScalaSubClass extends JavaSuperClass {
  override def method(javaInnerClass: JavaSuperClass#JavaInnerClass) {
    println("world")
  }
}
Run Code Online (Sandbox Code Playgroud)

我在Linux上有Java Sun JDK Hotspot 1.6.0_24和Scala 2.9.0.1.这是发生的事情:

$ cd javapkg
$ javac JavaSuperClass.java
$ cd ../scalapkg
$ scalac -cp .. ScalaSubClass.scala
ScalaSubClass.scala:6: error: class JavaInnerClass in class JavaSuperClass cannot be accessed in javapkg.JavaSuperClass
 Access to protected …
Run Code Online (Sandbox Code Playgroud)

scala

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

Scala中的类型安全原语

我想在我的Scala代码中使用基本类型安全的"子类",而不会出现拳击的性能损失(对于非常低延迟的应用程序).例如,像这样:

class Timestamp extends Long
class ProductId extends Long

def process(timestamp: Timestamp, productId: ProductId) {
  ...
}

val timestamp = 1: Timestamp // should not box
val productId = 1: ProductId // should not box

process(timestamp, productId) // should compile
process(productId, timestamp) // should NOT compile
Run Code Online (Sandbox Code Playgroud)

去年Scala用户邮件列表上有一个帖子似乎得出结论,没有拳击是不可能的,但我想知道现在Scala 2.8是否可行.

scala

8
推荐指数
1
解决办法
1380
查看次数

使用Java 7在Scala中编写JNI时出现javah时出错

在java 6中,我能够在Scala中使用JNI就好了.我会有像这样的代码:

package mypackage
object MyClass {
    System.loadLibrary("myclass-native")
    @native def foo(): Int = sys.error("")
}
Run Code Online (Sandbox Code Playgroud)

然后我跑了:

javah -classpath target/scala-2.9.1/classes -d target/jni mypackage.MyClass$
Run Code Online (Sandbox Code Playgroud)

而且我的头文件也很好.

在java 7中,我收到以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: mypackage.MyClass.
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177)
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:509)
at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
at com.sun.tools.javah.Main.main(Main.java:46)
Run Code Online (Sandbox Code Playgroud)

这就像javah不再接受类名中的美元符号,但我需要在Scala中使用美元符号来获得静态方法的等价物.

供java 6参考:

$ java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)
$ javah -version
javah version "1.6.0_29"
Run Code Online (Sandbox Code Playgroud)

用java 7:

$ java …
Run Code Online (Sandbox Code Playgroud)

java-native-interface scala

8
推荐指数
1
解决办法
2521
查看次数

Scala 2.10编译器在SBT中首次使用后需要长10倍

我正在将一些代码从2.9.1更新到2.10.0(我尝试使用相同结果的2.10.1),在两种情况下都使用SBT 0.12.1.

当我sbt clean compile在命令行上运行时,它们都在大约250秒后完成.

然而,当我运行sbt交互,并重复输入clean,然后compile,我的2.9编译变得更快,但我的2.10编译得到慢10倍.

如果我使用768m的堆大小,则在第3次编译时2.10内存不足.堆大小为4g时,每次都可以编译,但在第一次迭代后总是慢10倍.

[success] Total time: 258 s, completed Mar 14, 2013 10:44:34 AM
[success] Total time: 2048 s, completed Mar 14, 2013 11:23:03 AM
[success] Total time: 2049 s, completed Mar 14, 2013 11:58:42 AM
[success] Total time: 2047 s, completed Mar 14, 2013 12:43:19 PM
Run Code Online (Sandbox Code Playgroud)

我调试以找出发生了什么的最佳方式是什么?

scala scala-2.10

8
推荐指数
1
解决办法
1227
查看次数

习惯性替代存在类型

我有一些使用存在类型的Scala代码,我正在升级到2.10,我注意到有关添加"import language.existentials"的警告,这让我觉得应该有更好的方法来编写它.我的代码归结为:

class A {
  private var values = Set.empty[(Class[_], String)]
  def add(klass: Class[_], id: String) {
    val key = (klass, id)
    if (!values(key)) {
      values += key
      // More logic below..
    }
  }
Run Code Online (Sandbox Code Playgroud)

我收到这个警告:

[warn] test.scala:4 inferred existential type (Class[_$2], String) forSome { type _$2 }, which cannot be expressed by wildcards, should be enabled
[warn] by making the implicit value language.existentials visible.
[warn] This can be achieved by adding the import clause 'import language.existentials'
[warn] or by setting …
Run Code Online (Sandbox Code Playgroud)

scala

7
推荐指数
1
解决办法
2101
查看次数