Questions tagged «scala»

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



5
将列表分为具有固定数量元素的多个列表
如何将元素列表拆分为最多包含N个项目的列表? 例如:给定一个包含7个元素的列表,创建4个组,而最后一个组可能包含较少的元素。 split(List(1,2,3,4,5,6,"seven"),4) => List(List(1,2,3,4), List(5,6,"seven"))
119 list  scala  split 


12
如何在Scala中分析方法?
分析Scala方法调用的标准方法是什么? 我需要的是方法周围的钩子,可以用来启动和停止计时器。 在Java中,我使用方面编程AspectJ来定义要分析的方法,并注入字节码以实现相同的目的。 Scala中是否有更自然的方法,我可以在函数之前和之后定义一堆函数,而又不会在过程中丢失任何静态类型?

10
创建Scala列表的首选方法
有多种方法可以在Scala中构造不可变列表(请参见下面的伪造示例代码)。您可以使用可变的ListBuffer,创建var列表并对其进行修改,使用尾部递归方法以及其他我不知道的方法。 本能地,我使用ListBuffer,但是我没有充分的理由这样做。是否有一种首选的或惯用的方法来创建列表,或者是否存在最适合一种方法而不是另一种方法的情况? import scala.collection.mutable.ListBuffer // THESE are all the same as: 0 to 3 toList. def listTestA() ={ var list:List[Int] = Nil for(i <- 0 to 3) list = list ::: List(i) list } def listTestB() ={ val list = new ListBuffer[Int]() for (i <- 0 to 3) list += …
116 scala 

6
Scala:忽略失败的期货,将[未来]列出到[期货]
我正在寻找一种将任意长度的Future列表转换为List的Future的方法。我正在使用Playframework,所以最终,我真正想要的是一个Future[Result],但是为了简化起见,我们可以说Future[List[Int]]通常的做法是使用它,Future.sequence(...)但是有一点曲折...通常我给出的列表有大约10到20种期货,而且其中一种期货失败(他们正在提出外部Web服务请求)并不罕见。如果希望其中一个失败,则不必重试所有这些,而是​​希望能够找到成功的并返回它们。 例如,执行以下操作无效 import scala.concurrent._ import scala.concurrent.ExecutionContext.Implicits.global import scala.util.Success import scala.util.Failure val listOfFutures = Future.successful(1) :: Future.failed(new Exception("Failure")) :: Future.successful(3) :: Nil val futureOfList = Future.sequence(listOfFutures) futureOfList onComplete { case Success(x) => println("Success!!! " + x) case Failure(ex) => println("Failed !!! " + ex) } scala> Failed !!! java.lang.Exception: Failure 除了希望获得唯一的例外,我还希望能够将1和3从那里拉出来。我尝试使用Future.fold,但显然只是Future.sequence在后台调用。 …
116 scala  future 



7
Scala向下还是向下循环?
在Scala中,您经常使用迭代器以for递增顺序执行循环,例如: for(i <- 1 to 10){ code } 您将如何处理,使其从10变为1?我猜10 to 1给定一个空的迭代器(如通常的范围数学)? 我制作了一个Scala脚本,可以通过在迭代器上调用reverse来解决该问题,但是我认为这不好,遵循以下方法吗? def nBeers(n:Int) = n match { case 0 => ("No more bottles of beer on the wall, no more bottles of beer." + "\nGo to the store and buy some more, " + "99 bottles of beer on …

9
遍历Scala中的Java集合
我正在编写一些使用Apache POI API的Scala代码。我想遍历java.util.IteratorSheet类中包含的行。我想在for each样式循环中使用迭代器,因此我一直试图将其转换为本地Scala集合,但不会走运。 我已经看过Scala包装器类/特征,但是看不到如何正确使用它们。如何在不使用while(hasNext()) getNext()循环的冗长样式的情况下遍历Scala中的Java集合? 这是我根据正确答案编写的代码: class IteratorWrapper[A](iter:java.util.Iterator[A]) { def foreach(f: A => Unit): Unit = { while(iter.hasNext){ f(iter.next) } } } object SpreadsheetParser extends Application { implicit def iteratorToWrapper[T](iter:java.util.Iterator[T]):IteratorWrapper[T] = new IteratorWrapper[T](iter) override def main(args:Array[String]):Unit = { val ios = new FileInputStream("assets/data.xls") val workbook = new HSSFWorkbook(ios) var …

7
如何使用标准Scala类在Scala中解析JSON?
我正在使用Scala 2.8中的JSON类中的构建来解析JSON代码。我由于最小化依赖性而不想使用Liftweb或其他任何一种。 我这样做的方法似乎势在必行,是否有更好的方法可以做到? import scala.util.parsing.json._ ... val json:Option[Any] = JSON.parseFull(jsonString) val map:Map[String,Any] = json.get.asInstanceOf[Map[String, Any]] val languages:List[Any] = map.get("languages").get.asInstanceOf[List[Any]] languages.foreach( langMap => { val language:Map[String,Any] = langMap.asInstanceOf[Map[String,Any]] val name:String = language.get("name").get.asInstanceOf[String] val isActive:Boolean = language.get("is_active").get.asInstanceOf[Boolean] val completeness:Double = language.get("completeness").get.asInstanceOf[Double] }
113 json  scala 

1
为什么Scala中的模式匹配不适用于变量?
具有以下功能: def fMatch(s: String) = { s match { case "a" => println("It was a") case _ => println("It was something else") } } 这种模式很好地匹配: scala> fMatch("a") It was a scala> fMatch("b") It was something else 我想做的事情如下: def mMatch(s: String) = { val target: String = "a" s match { …


1
了解为什么拉链是Comonad
这是对上一个问题的回答的后续步骤。 假设我需要映射每个项目a:A的List[A]来b:B使用功能def f(a:A, leftNeighbors:List[A]): B和产生List[B]。 显然,我不能只调用map列表,而可以使用列表拉链。拉链是用于在列表中移动的光标。它提供对当前元素(focus)及其相邻元素的访问。 现在,我可以将替换f为 def f'(z:Zipper[A]):B = f(z.focus, z.left)并将该新函数传递f'给的cobind方法Zipper[A]。 这样的cobind工作:先f'用拉链调用,然后移动拉链,f'再用新的 “移动”拉链调用,再移动拉链,依此类推,依此类推,直到拉链到达列表的末尾。 最后,cobind返回一个类型为的新拉链Zipper[B],可以将其转换为列表,从而解决了问题。 现在请注意和之间的对称性cobind[A](f:Zipper[A] => B):Zipper[B],bind[A](f:A => List[B]):List[B]这就是为什么Lista Monad和Zipperis a 的原因Comonad。 是否有意义 ?

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.