当我在控制台中运行以下代码时(groovy 2.1.3):
strings = [ "butter", "bread", "dragon", "table" ]
strings.eachParallel{println "$it0"}
Run Code Online (Sandbox Code Playgroud)
我明白了:
groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.eachParallel() is applicable for argument types: (ConsoleScript40$_run_closure1) values: [ConsoleScript40$_run_closure1@a826f5]
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?
我试图从命令行调用sbt 程序集将scalac编译器标志传递给elides(elide-below 1).
我已经设法通过将此行添加到build.sbt来获取build.sbt中的标志
scalacOptions ++= Seq("-Xelide-below", "1")
当我启动sbt并执行以下操作时,它也正常工作:
$> sbt
$> set scalacOptions in ThisBuild ++=Seq("-Xelide-below", "0")
Run Code Online (Sandbox Code Playgroud)
但是我想知道如何在启动sbt时传递它,以便我的CI作业可以在执行不同的程序集目标时使用它(即dev/test/prod).
鉴于我有一张地图:
def myMap = [ b : [ c:"X" ] ]
Run Code Online (Sandbox Code Playgroud)
还有一个字符串
def key = 'b.c'
Run Code Online (Sandbox Code Playgroud)
我想看看我使用密钥获取值'X'的选项.
我已经提出了两种方法来实现这一目标,但我对这些解决方案并不满意:
1) Eval.me("theMap", myMap, "theMap.$key")
2) mayMap."$key.split('\\.')[0]"."$key.split('\\.')[1]"
Run Code Online (Sandbox Code Playgroud)
任何人都有更好的方法在Groovy中这样做?
可能重复:
地图操作中的元组解包
可以说我有以下Map [Int,Double]:
scala> map
res19: scala.collection.immutable.Map[Int,Double] = Map(1 -> 1.1, 2 -> 2.2)
Run Code Online (Sandbox Code Playgroud)
我可以在其上运行以下foldLeft:
scala> map.foldLeft("A")((initVal,x:(Int,Double)) => initVal + x._1)
res20: java.lang.String = A12
Run Code Online (Sandbox Code Playgroud)
但是我找不到将元组的值赋给命名变量的方法:
scala> map.foldLeft("A")((init,x:(a:Int,b:Double)) => init + x.a)
<console>:1: error: ')' expected but ':' found.
map.foldLeft("A")((init,x:(a:Int,b:Double)) => init + x.a)
^
Run Code Online (Sandbox Code Playgroud)
甚至可以这样做吗?
最近我遇到了一个非常有用的groupBy函数,Groovy在Iterable上提供了这个函数:
public static Map groupBy(Iterable self, List<Closure> closures)
Run Code Online (Sandbox Code Playgroud)
您可以使用它来执行列表甚至地图上的递归groupBy,请参阅mrhaki此处的示例
我想编写一个在Scala中执行相同操作的函数.但刚刚开始我的Scala之旅,我对于如何定义和实现此方法感到很遗憾.特别是函数的泛型方面和此方法签名的返回类型超出了我的水平.
我需要更有经验的Scala开发人员来帮助我.
以下签名是完全错误还是我在球场?
def groupBy[A, K[_]](src: List[A], fs: Seq[(A) ? K[_]]): Map[K[_], List[A]]
Run Code Online (Sandbox Code Playgroud)
另外,如何使用正确的类型实现递归?