是否有一个简短的sbt命令或键盘快捷键来重新调用最后发出的命令?我发现自己必须反复执行这个问题:
> test-only my.long.package.etc.class.name
Run Code Online (Sandbox Code Playgroud)
复制+粘贴有点烦人.我在IntelliJ IDEA中使用sbt控制台,因此向上滚动浏览历史记录不起作用.
我正在尝试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)工作,因此它是一种无法正常工作的转换更新方法.我的错误在哪里?
我无法使以下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)测试了这个.此外,我有一个自定义的树表组件,没有问题排序,所以错误必须在上面的某处.
我对内部类方法和构造函数的私有注释有困难.虽然这按预期工作:
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根本不想吞下它......
我正在使用collection.mutable.Map默认值collection.mutable.HashMap.我需要跟踪该地图中的项目数量,因此我想知道这个类是否已经实现了快速size响应,这将使我不必自己跟踪它.
这与useSizeMap方法有关吗?不幸的是,这种方法的文档是如此模糊,确定任何东西都是完全没用的.
我需要能够通过反射实例化各种案例类,既可以确定构造函数的参数类型,也可以使用所有默认参数调用构造函数。
我已经做到了这一点:
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()。
我无法在以下字符串插补器中包含引号:
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 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)
有线索吗?
编写flatten(lol: List[List[T]]): List[T]列表列表到新列表很容易。其他“扁平”集合(例如Set)似乎也提供flatten了。
现在,我想知道是否可以定义flattenfor Tree[T](定义为T和的列表Tree[T])。
我是斯卡拉的新手.当我运行以下代码时:
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,似乎无法使我的匹配表达式工作.我已经读过关于如何评估语句之间的差异(例如,一个新变量而不是声明的变量),但似乎无法获得反引号或大写的工作.
// 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语言的东西.谢谢!
我正在使用play2框架,所以当我检索参数时,我总是得到Option.但我只会在所有选项都匹配(Not None)时继续处理.
我不想写嵌套match,因为看起来很难看.
if( isDefined("a") && isDefined("b"){
//dosomething
}
Run Code Online (Sandbox Code Playgroud) 对于数据流场景,我需要以递归方式相互引用的值.以下不起作用:
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?
scala ×13
collections ×1
java ×1
jtable ×1
macros ×1
recursion ×1
reflection ×1
sbt ×1
scala-2.11 ×1
swing ×1
tree ×1