标签: scala-2.7

将Java集合转换为Scala集合

与Stack Overflow相关的问题Scala相当于新的HashSet(Collection),如何将Java集合(java.util.List比如说)转换为Scala集合List

我其实想转换一个Java API调用Spring的 SimpleJdbcTemplate,它返回一个java.util.List<T>,成一个斯卡拉不变HashSet.例如:

val l: java.util.List[String] = javaApi.query( ... )
val s: HashSet[String] = //make a set from l
Run Code Online (Sandbox Code Playgroud)

这似乎有效.批评是受欢迎的!

import scala.collection.immutable.Set
import scala.collection.jcl.Buffer 
val s: scala.collection.Set[String] =
                      Set(Buffer(javaApi.query( ... ) ) : _ *)
Run Code Online (Sandbox Code Playgroud)

java scala scala-2.7 scala-collections

86
推荐指数
6
解决办法
7万
查看次数

如何在IntelliJ IDEA中使用Scala(或者:为什么难以获得Scala的工作IDE)?

我最近放弃了尝试在Eclipse中使用Scala(像完成这样的基本内容不起作用).所以现在我正在尝试使用IntelliJ.我没有走得太远.

我已经能够编辑程序了(在语法高亮和完成之内......耶!).但我甚至无法运行最简单的"Hello World".这是原始错误:

Scala signature Predef has wrong version
Expected 5.0
found: 4.1 in .... scala-library.jar

但那是昨天的IDEA 9.0.1.见下文...

UPDATE

今天我卸载了IntelliJ 9.0.1,并安装了9.0.2 Early Availability,以及4/14稳定版的Scala插件.

然后我从头开始通过向导设置一个项目:

  • 新项目从头开始
  • JDK是1.6.u20
  • 接受默认(项目)而不是global/module
  • 接受将Scala 2.8.0beta1下载到项目的lib文件夹中

创建了一个新类:

object hello {
  def main(args: Array[String]) {
    println("hello: " + args);
  }
}

对于我的努力,我现在有一个全新的错误:)

这里是:

Scalac内部错误:类java.lang.ClassNotFoundException [java.net.URLClassLoader $ 1.run(URLClassLoader.java:202),java.security.AccessController.doPrivileged(Native Method),java.net.URLClassLoader.findClass(URLClassLoader.java) :190),java.lang.ClassLoader.loadClass(ClassLoader.java:307),sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301),java.lang.ClassLoader.loadClass(ClassLoader.java:248) ,java.lang.Class.forName0(本机方法),java.lang.Class.forName(Class.java:169),org.jetbrains.plugins.scala.compiler.rt.ScalacRunner.main(ScalacRunner.java:72) ]

最终更新

我卸载了9.0.2 EA并重新安装了9.0.1,但这次使用的是2.7.3版本的Scala而不是默认的2.7.6,因为2.7.3是IntelliJ网站屏幕截图中显示的那个(我猜屏幕截图证明他们实际测试了这个版本!).现在一切正常!!!

scala intellij-idea scala-2.8 scala-2.7

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

在scala中的自键型特征中调用超类的方法

我正在尝试创建一个特性,当混入时,将用一个调用原始方法的方法替换方法的默认定义,然后操纵结果.

这是我正在尝试做的事情:

class Foo {
  def bar() : String = "Foos bar"
}

trait OtherStuff {
  self : Foo =>
  def bar() : String = self.bar() + " with OtherStuff"
}

class Quux extends Foo with OtherStuff
Run Code Online (Sandbox Code Playgroud)

如果按照我想要的方式工作,那么(new Quux).bar现在就会回归Foos bar with OtherStuff.不幸的是,它不起作用 - 我得到的是:

<console>:6: error: error overriding method bar in class Foo of type ()String;
 method bar in trait OtherStuff of type ()String needs `override' modifier
       class Quux extends Foo with OtherStuff
Run Code Online (Sandbox Code Playgroud)

但如果我override在定义时使用 …

scala scala-2.7

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

我可以使用for-comprehenion/yield在Scala中创建地图吗?

我可以"屈服"成地图吗?

我试过了

val rndTrans = for (s1 <- 0 to nStates;
                    s2 <- 0 to nStates
                        if rnd.nextDouble() < trans_probability)
                            yield (s1 -> s2);
Run Code Online (Sandbox Code Playgroud)

(而,不是->)但我得到了错误

TestCaseGenerator.scala:42: error: type mismatch;
 found   : Seq.Projection[(Int, Int)]
 required: Map[State,State]
    new LTS(rndTrans, rndLabeling)
Run Code Online (Sandbox Code Playgroud)

我明白为什么,但我看不出如何解决这个问题: - /

scala for-comprehension scala-2.7

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

惯用属性更改了scala中的通知?

我试图在WPF/silverlight数据绑定中使用数据绑定看到一种更清晰的替代方案(对于Scala来说是惯用的) - 即实现INotifyPropertyChanged.首先,一些背景:

在.Net WPF或silverlight应用程序中,您具有双向数据绑定的概念(即,将UI的某些元素的值绑定到DataContext的.net属性,以便更改为UI元素影响属性,反之亦然.实现这一点的一种方法是在DataContext中实现INotifyPropertyChanged接口.不幸的是,这为你添加到"ModelView"类型的任何属性引入了很多样板代码.这是它的外观在斯卡拉:

trait IDrawable extends INotifyPropertyChanged
{    
      protected var drawOrder : Int = 0
      def DrawOrder : Int = drawOrder
      def DrawOrder_=(value : Int) {
            if(drawOrder != value) {
                  drawOrder = value
                  OnPropertyChanged("DrawOrder")
            }
      }

      protected var visible : Boolean = true
      def Visible : Boolean = visible
      def Visible_=(value: Boolean) = {
            if(visible != value) {
                  visible = value
                  OnPropertyChanged("Visible")
            }
      }
      def Mutate() : Unit = {
          if(Visible) {
              DrawOrder += 1 // Should trigger …
Run Code Online (Sandbox Code Playgroud)

scala scala-2.8 scala-2.7

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

巨大地图的不可变地图实施

如果我有一个不可变的地图,我可能期望(在很短的时间内 - 如几秒钟)添加/删除数十万个项目,标准HashMap是一个坏主意?假设我想在<10秒内通过Map传递1Gb数据,这样任何一次瞬间Map的最大大小只有256Mb.

我得到的印象是地图保留了某种"历史",但我将始终访问最后更新的表(即我不传递地图),因为它是一个私有成员变量,Actor只更新/访问从反应中.

基本上我怀疑这个数据结构可能(部分)因为在短时间内读取大量数据时JVM内存不足而出现问题.

我是否会更好地使用不同的地图实现,如果是这样,它是什么?

scala map out-of-memory immutability scala-2.7

10
推荐指数
2
解决办法
4083
查看次数

使用IntelliJ IDEA 9.0.1为Scala锁定"Hello World"

我从2.x和IDE开始使用Eclipse已经超过20年了(自80年代后期的Turbo Pascal和Turbo C以来!).

(该序言应该暗示,"我不是白痴"......但听起来并不那么聪明...... LOL: - ])

现在我正在尝试在IntelliJ 9.0.1中使用Scala调试器.我已经辞去了旧的待机状态,"hello world"技巧来检查环境是否设置正确:

class hello {
  def main(a: Array[String]) = println("got args: " + a)
}

我也试过这个版本,以防万一:

object hello extends Application {
    println("hi")
}

唉,我甚至无法让这个简单的Scala示例运行.我想最终在其中设置一个断点,但是现在只运行它会很棒.我有Java 1.6u20和Scala插件0.3.473(2010年1月).以下错误总结了我的经验:

替代文字http://img535.imageshack.us/img535/842/ij9.jpg

我可能做错了什么?

谢谢

ide scala intellij-idea scala-2.7

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

Java代码中的"?extends"上的Scala类型推断失败

我有以下简单的Java代码:

package testj;
import java.util.*;

public class Query<T> {

    private static List<Object> l = Arrays.<Object>asList(1, "Hello", 3.0);

    private final Class<? extends T> clazz;

    public static Query<Object> newQuery() { return new Query<Object>(Object.class); }

    public Query(Class<? extends T> clazz) { this.clazz = clazz; }

    public <S extends T> Query<S> refine(Class<? extends S> clazz) {
        return new Query<S>(clazz);
    }

    public List<T> run() {
        List<T> r = new LinkedList<T>();
        for (Object o : l) {
            if (clazz.isInstance(o)) r.add(clazz.cast(o));
        }
        return r;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以用Java调用它,如下所示: …

generics scala type-inference scala-2.7

4
推荐指数
1
解决办法
1028
查看次数

如何从Scala中的较大字符串中提取有效电子邮件

我的scala版本2.7.7

我试图从更大的字符串中提取电子邮件地址.字符串本身不遵循任何格式.我得到的代码:

import scala.util.matching.Regex
import scala.util.matching._
val Reg = """\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b""".r
"yo my name is joe : joe@gmail.com" match {
    case Reg(e) => println("match: " + e)
    case _ => println("fail")
}
Run Code Online (Sandbox Code Playgroud)

正则表达式在RegExBuilder中传递但不传递scala.另外,如果有另一种方法来做这个没有正则表达式也可以.谢谢!

regex scala scala-2.7

4
推荐指数
1
解决办法
2232
查看次数