小编0__*_*0__的帖子

重复上一个sbt命令?

是否有一个简短的sbt命令或键盘快捷键来重新调用最后发出的命令?我发现自己必须反复执行这个问题:

> test-only my.long.package.etc.class.name
Run Code Online (Sandbox Code Playgroud)

复制+粘贴有点烦人.我在IntelliJ IDEA中使用sbt控制台,因此向上滚动浏览历史记录不起作用.

scala intellij-idea sbt

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

Curried更新方法

我正在尝试curried应用和更新这样的方法:

def apply(i: Int)(j: Int) = matrix(i)(j)
def update(i: Int, j: Int, value: Int) = 
  new Matrix(n, m, (x, y) => if ((i,j) == (x,y)) value else matrix(x)(y))
Run Code Online (Sandbox Code Playgroud)

Apply方法正常工作,但更新方法抱怨:

scala> matrix(2)(1) = 1
<console>:16: error: missing arguments for method apply in class Matrix;
follow this method with `_' if you want to treat it as a partially applied function
              matrix(2)(1) = 1
Run Code Online (Sandbox Code Playgroud)

调用直接update(2)(1)(1)工作,因此它是一种无法正常工作的转换更新方法.我的错误在哪里?

scala

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

(J)尽管已启用自动行分类器并使用可比数据,但表仍未排序

我无法使以下Swing表视图可以排序.虽然我确实在列标题翻转时得到了小三角形,但是根据排序状态,表内容不会有任何不同的刷新:

import scala.swing._

val data = Array(
  Array("a", 4, 8.9),
  Array("b", 7, 2.3),
  Array("c", 1, 5.6)
).map(_.map(_.asInstanceOf[AnyRef]))

val m = new javax.swing.table.DefaultTableModel(data, 
  Array[AnyRef]("string", "int", "double")) {

   override def getColumnClass(c: Int): Class[_] = c match {
     case 0 => classOf[java.lang.String ]
     case 1 => classOf[java.lang.Integer]
     case 2 => classOf[java.lang.Double ]
   }
}

val t = new Table
t.model = m
t.peer.setAutoCreateRowSorter(true)

new Frame {
  contents = new ScrollPane(t)
  pack().centerOnScreen()
  open()
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我用不同的外观(截图显示Nimbus)和JDK(OpenJDK 6,OpenJDK 7)测试了这个.此外,我有一个自定义的树表组件,没有问题排序,所以错误必须在上面的某处.

java swing scala jtable tablerowsorter

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

内部类的隐私和外部类型的子类型的可访问性

我对内部类方法和构造函数的私有注释有困难.虽然这按预期工作:

trait A {
  protected def lala = ()
}

trait B extends A {
  lala
}
Run Code Online (Sandbox Code Playgroud)

以下不是:

trait A {
  class Lala protected()
}

trait B extends A {
   new Lala
}
Run Code Online (Sandbox Code Playgroud)

这也不是:

trait A {
  class Lala private[A]()
}

trait B extends A {
  new Lala
}
Run Code Online (Sandbox Code Playgroud)

唯一的方法是这样的:

object Screwed {
  trait A {
    class Lala private[Screwed]()
  }

  trait B extends A {
    new Lala
  }
}
Run Code Online (Sandbox Code Playgroud)

Scala真的在这里没有提供明确的机制,或者我错过了什么?我的猜测本来应该是,private[this.type]但是scalac根本不想吞下它......

scala private-members

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

collection.mutable.HashMap有一个有效的大小方法吗?

我正在使用collection.mutable.Map默认值collection.mutable.HashMap.我需要跟踪该地图中的项目数量,因此我想知道这个类是否已经实现了快速size响应,这将使我不必自己跟踪它.

这与useSizeMap方法有关吗?不幸的是,这种方法的文档是如此模糊,确定任何东西都是完全没用的.

collections scala scala-collections

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

通过反射使用默认参数实例化案例类

我需要能够通过反射实例化各种案例类,既可以确定构造函数的参数类型,也可以使用所有默认参数调用构造函数。

我已经做到了这一点:

import reflect.runtime.{universe => ru}
val m = ru.runtimeMirror(getClass.getClassLoader)

case class Bar(i: Int = 33)

val tpe      = ru.typeOf[Bar]
val classBar = tpe.typeSymbol.asClass
val cm       = m.reflectClass(classBar)
val ctor     = tpe.declaration(ru.nme.CONSTRUCTOR).asMethod
val ctorm    = cm.reflectConstructor(ctor)

// figuring out arg types
val arg1 = ctor.paramss.head.head
arg1.typeSignature =:= ru.typeOf[Int] // true
// etc.

// instantiating with given args
val p = ctorm(33)
Run Code Online (Sandbox Code Playgroud)

现在缺少的部分:

val p2 = ctorm()  // IllegalArgumentException: wrong number of arguments
Run Code Online (Sandbox Code Playgroud)

那么我如何p2使用 的默认参数创建Bar,即没有反射的情况Bar()

reflection scala

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

在f字符串插值中转义引号

我无法在以下字符串插补器中包含引号:

f"foo ${math.abs(-0.9876f)*100}%1.1f%%"
Run Code Online (Sandbox Code Playgroud)

输出是

foo 98.8%
Run Code Online (Sandbox Code Playgroud)

现在所需的输出是

foo "98.8%"
Run Code Online (Sandbox Code Playgroud)

插入\"不起作用,只会产生"未关闭的字符串文字"错误.

scala string-interpolation

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

Scala 2.11中的宏API发生了什么变化?

我试图将一个宏从Scala 2.10移植到2.11.0-M7:

import scala.reflect.macros.Context

object Format {
  def apply[A]: Unit = macro applyImpl[A]

  def applyImpl[A: c.WeakTypeTag](c: Context): c.Expr[Unit] = ???
}
Run Code Online (Sandbox Code Playgroud)

必须改变一些东西,因为编译器说不scala.reflect.macros.Context存在.

我的构建文件如下所示:

scalaVersion := "2.11.0-M7"

resolvers += Resolver.sonatypeRepo("snapshots")

addCompilerPlugin("org.scala-lang.plugins" % "macro-paradise" % "2.0.0-SNAPSHOT"
  cross CrossVersion.full)
Run Code Online (Sandbox Code Playgroud)

有线索吗?

macros scala scala-2.11

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

如何在Scala中展平树木?

编写flatten(lol: List[List[T]]): List[T]列表列表到新列表很容易。其他“扁平”集合(例如Set)似乎也提供flatten了。

现在,我想知道是否可以定义flattenfor Tree[T](定义为T和的列表Tree[T])。

tree functional-programming scala

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

令人困惑的println输出顺序

我是斯卡拉的新手.当我运行以下代码时:

object HelloWorld {

  def main(args:Array[String]): Unit =

    println("1" + (1 to 4))

    println("2" + (1 to 4))

    Thread.sleep(100)

    for(x <- (1 to 4)) {

      println(inc(x) + " " + inc_sq(x, 4))

    }

  def inc(i:Int): Int = i + 1

  def inc_sq(i:Int, r:Int): Int = 

    (i+r) * (i+r)

}
Run Code Online (Sandbox Code Playgroud)

我得到了输出:

2Range(1, 2, 3, 4)
2 25
3 36
4 49
5 64
1Range(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种疾病?我的意思是我认为实际输出的最后一行应该在第一行.

我在Eclipse中使用Mac和Scala.

scala

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

匹配字符串数字 - 无法访问的代码

新scala,似乎无法使我的匹配表达式工作.我已经读过关于如何评估语句之间的差异(例如,一个新变量而不是声明的变量),但似乎无法获得反引号或大写的工作.

// declared inside of object
val numberOne = "+17201234567"
val numberTwo = "+17201235678"

def returnSomething(number: String): String = number match {
  case numberOne => "my first number"
  case numberTwo => "my second number"
  case _ => "a default number"
}

...

returnSomething("+17201235678") // should return "my second number"
Run Code Online (Sandbox Code Playgroud)

请帮助澄清为什么这不起作用,因为我在匹配语句的第二行出现"无法访问的代码"错误.我知道这个问题已经结束了,但由于某种原因,我见过的所有例子都没有为我工作.典型的noob语言的东西.谢谢!

scala pattern-matching

0
推荐指数
1
解决办法
291
查看次数

满足所有参数选项时的scala条件

我正在使用play2框架,所以当我检索参数时,我总是得到Option.但我只会在所有选项都匹配(Not None)时继续处理.

我不想写嵌套match,因为看起来很难看.

if( isDefined("a") && isDefined("b"){
    //dosomething 
}
Run Code Online (Sandbox Code Playgroud)

scala playframework-2.0

0
推荐指数
1
解决办法
65
查看次数

定义递归引用 - lazy val导致堆栈溢出

对于数据流场景,我需要以递归方式相互引用的值.以下不起作用:

class Foo(val that: Foo)

class Bar {
  lazy val a: Foo = new Foo(b)
  lazy val b: Foo = new Foo(a)
  println(s"a = $a, b = $b")
}

new Bar  // boom!
Run Code Online (Sandbox Code Playgroud)

如何在不弄脏我的情况下解决这个问题var

recursion scala lazy-evaluation

0
推荐指数
2
解决办法
236
查看次数