Questions tagged «scala»

Scala是主要针对Java虚拟机的通用编程语言。它旨在以简洁,优雅和类型安全的方式表达常见的编程模式,它融合了命令式和功能性编程风格。它的主要特征是:具有类型推断功能的高级静态类型系统;功能类型;模式匹配; 隐式参数和转换;操作符重载;与Java完全互操作性;并发

4
Scala上的类型不匹配以进行理解
为什么这种构造会在Scala中导致类型不匹配错误? for (first <- Some(1); second <- List(1,2,3)) yield (first,second) <console>:6: error: type mismatch; found : List[(Int, Int)] required: Option[?] for (first <- Some(1); second <- List(1,2,3)) yield (first,second) 如果我用列表切换Some,它可以很好地编译: for (first <- List(1,2,3); second <- Some(1)) yield (first,second) res41: List[(Int, Int)] = List((1,1), (2,1), (3,1)) 这也可以正常工作: for (first <- …


7
如何声明空列表,然后在Scala中添加字符串?
我有这样的代码: val dm = List[String]() val dk = List[Map[String,Object]]() ..... dm.add("text") dk.add(Map("1" -> "ok")) 但是会抛出运行时java.lang.UnsupportedOperationException。 我需要声明一个空列表或空地图,并且在代码的后面部分需要填充它们。
81 scala 


7
如何在Scala中对数组排序?
我可以看到上面有一个Sorting带有快速排序方法的排序对象quickSort。 使用它对任意类型的对象数组进行排序的代码示例是什么?看起来我需要传递Orderabletrait的实现,但是我不确定语法。 另外,我希望以“ Scala方式”进行回答。我知道我只能使用Java库。
80 sorting  scala 

6
如何检查一个字符串是否与Scala中的正则表达式完全匹配?
假设我有一个正则表达式模式,我想匹配许多字符串。 val Digit = """\d""".r 我只想检查给定的String是否完全匹配Regex。在Scala中,有什么好的和惯用的方法来做到这一点? 我知道我可以在Regexes上进行模式匹配,但是这种情况在语法上并不令人满意,因为我没有要提取的组: scala> "5" match { case Digit() => true case _ => false } res4: Boolean = true 或者,我可以回到基本的Java模式: scala> Digit.pattern.matcher("5").matches res6: Boolean = true 这也不优雅。 有更好的解决方案吗?
80 regex  scala 


6
返回斯卡拉
我是新手Scala程序员,遇到了奇怪的行为。 def balanceMain(elem: List[Char]): Boolean = { if (elem.isEmpty) if (count == 0) true; else false; if (elem.head == '(') balanceMain(elem.tail, open, count + 1);.... 基本上以上,如果elem.isEmpty和,我想返回true count == 0。否则,我想返回false。 至此,我已经阅读到,无需在scala中添加return语句。所以我在return上面省略了。但是它不返回布尔值。如果我将return语句添加为return true。它完美地工作。为什么会这样呢? 另外,为什么在scala中使用return语句被认为是不好的做法
80 scala  return 

2
Scala classOf用于类型参数
我正在尝试使用scala / java创建用于对象更新的通用方法,但无法获取类型参数的类。 这是我的代码: object WorkUnitController extends Controller { def updateObject[T](toUpdate: T, body: JsonObject){ val source = gson.fromJson(body, classOf[T]); ... } } 我得到的错误是 类别类型为必填项,但找到了T 我知道在Java中您无法做到这一点,但是在Scala中这是否可能呢? 谢谢!
79 scala 


1
Scala多种类型模式匹配
我想知道如何使用多种类型模式匹配。我有: abstract class MyAbstract case class MyFirst extends MyAbstract case class MySecond extends MyAbstract case class MyThird extends MyAbstract // shouldn't be matched and shouldn't call doSomething() val x: MyAbstract = MyFirst x match { case a: MyFirst => doSomething() case b: MySecond => doSomething() case _ => doSomethingElse() } …

3
Scala的apply()方法魔术如何工作?
在Scala中,如果定义了apply在类或顶级对象中调用的方法,则每当我在该类的实例后面加上一对括号并apply()在它们之间放置适当的参数时,就会调用该方法。例如: class Foo(x: Int) { def apply(y: Int) = { x*x + y*y } } val f = new Foo(3) f(4) // returns 25 因此,基本上,object(args)只是的语法糖object.apply(args)。 Scala如何进行这种转换? 是否存在全局定义的隐式转换,类似于Predef对象中的隐式类型转换(但种类不同)?还是更深层的魔力?我问,是因为Scala似乎强烈赞成一致地应用较小的规则集,而不是许多例外的规则。最初,这对我来说似乎是个例外。

8
Scala编译时如何防止java.lang.OutOfMemoryError:PermGen空间?
我注意到我的Scala编译器有一个奇怪的行为。编译类时,有时会抛出OutOfMemoryError。这是错误消息: [info] Compiling 1 Scala source to /Users/gruetter/Workspaces/scala/helloscala/target/scala-2.9.0/test-classes... java.lang.OutOfMemoryError: PermGen space Error during sbt execution: java.lang.OutOfMemoryError: PermGen space 它只会偶尔发生一次,并且通常不会在随后的编译运行中引发该错误。我使用Scala 2.9.0并通过SBT进行编译。 是否有人知道导致此错误的原因?预先感谢您的见解。


2
Mixins vs Scala中的成分
在Java世界中(更确切地说,如果您没有多个继承/混合),经验法则非常简单:“在类继承上是最喜欢的对象组成”。 我想知道是否/如果您也考虑混入,特别是在scala中,如何更改混入? 是否将mixin视为一种多重继承或更多类组合的方式? 还有“从对象组成到从类组成”(或相反)的指导原则吗? 当人们使用(或滥用)mixins进行对象组合也可以完成工作时,我已经看到了很多示例,但我并不总是确定哪一个更好。在我看来,您可以通过它们实现非常相似的事情,但是也存在一些差异,例如: 可见性-使用mixins时,所有内容都成为公共api的一部分,对于组合而言,情况并非如此。 冗长-在大多数情况下,mixin不太冗长,使用起来也更容易一些,但并非总是如此(例如,如果您还在复杂的层次结构中使用自身类型) 我知道简短的答案是“取决于情况”,但是当这种情况更好时,可能会有一些典型情况。 到目前为止,我可以提出一些准则示例(假设我具有A和B的两个特征,A希望使用B的某些方法): 如果要使用B的方法扩展A的API,则使用混合包,否则使用组合。但是,如果我正在创建的类/实例不属于公共API的一部分,则无济于事。 如果您想使用一些需要混合的模式(例如Stackable Trait Pattern),那么这是一个简单的决定。 如果您有循环依赖项,那么使用self类型的mixin可以提供帮助。(我试图避免这种情况,但这并不总是那么容易) 如果您需要一些动态的,运行时的决定,然后决定如何进行合成,然后进行对象合成。 在许多情况下,mixin似乎更容易(和/或不太冗长),但是我敢肯定,它们也存在一些陷阱,例如“上帝类”以及其他两篇artima文章中所述的其他内容:第1部分,第2部分(顺便说一句在我看来,其他大多数问题与scala无关/并不那么严重。 您还有更多类似的提示吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.