在Java中你可以写Boolean.valueOf(myString)
.但是在Scala中,java.lang.Boolean
隐藏了scala.Boolean
缺少此功能的东西.切换到使用原始Java版本的布尔值很容易,但这似乎不对.
那么Scala中用于true
从字符串中提取的单行,规范解决方案是什么?
给定一个带有可变数量参数的函数,例如
def foo(os: String*) =
println(os.toList)
Run Code Online (Sandbox Code Playgroud)
如何将一系列参数传递给函数?我想写:
val args = Seq("hi", "there")
foo(args)
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用.
较高等级的类型看起来很有趣.从Haskell wikibook到这个例子:
foo :: (forall a. a -> a) -> (Char,Bool)
foo f = (f 'c', f True)
Run Code Online (Sandbox Code Playgroud)
现在我们可以在foo id
没有编译器爆炸的情况下进 这个例子在书中很快被我在其他几个地方看到的真实世界的例子:ST monad和runST
.那很酷.
但是我还没有遇到过这样一种情况:我通过使用更高级别的参数编写自己的函数来解决问题.你呢?您在野外有什么样的rank-2或rank-n多态性?
我有一个迭代vals: Iterable[T]
和一个长期运行的功能,没有任何相关的副作用:f: (T => Unit)
.现在这应用于vals
显而易见的方式:
vals.foreach(f)
Run Code Online (Sandbox Code Playgroud)
我希望f
同时完成调用(在合理的限制内).Scala基础库中某处有明显的功能吗?就像是:
Concurrent.foreach(8 /* Number of threads. */)(vals, f)
Run Code Online (Sandbox Code Playgroud)
虽然f
运行时间相当长,但它足够短,我不希望为每个调用调用一个线程的开销,所以我正在寻找基于线程池的东西.
我想从命令行启动Scala Swing应用程序,然后在应用程序启动后,放入Scala REPL以用作控制接口.
理想情况下,我还想预先绑定一些变量名称.更好的是为REPL使用Java2D终端仿真器,但我找不到合适的东西.
Scala REPL是否有公共API?
在Scala 2.8中,我有一个不可变的映射,每个键有多个值:
Map[T,Iterable[U]]
Run Code Online (Sandbox Code Playgroud)
有优越的代表性吗?其次,你将如何从中生成这样的地图
Iterable[(T,U)]
Run Code Online (Sandbox Code Playgroud)
?我目前正在使用:
def toGroupedMap[T,U](vals: Iterable[(T,U)]): Map[T,Iterable[U]] =
vals.groupBy(_._1).map({ case (s,it) => (s,it.map(_._2)) }).toMap
Run Code Online (Sandbox Code Playgroud)
哪个有效,但感觉笨重.
编辑:我应该指定我正在使用不可变数据.是否存在与MultiMap不可变的等价物?
scala ×5
concurrency ×1
haskell ×1
multimap ×1
polymorphism ×1
scala-2.8 ×1
type-systems ×1
types ×1