Sought是一种有效的算法,它在一个区间中找到唯一的整数,该区间[a, b]在其二进制表示中具有最大的尾随零数(a并且b整数> 0):
def bruteForce(a: Int, b: Int): Int =
(a to b).maxBy(Integer.numberOfTrailingZeros(_))
def binSplit(a: Int, b: Int): Int = {
require(a > 0 && a <= b)
val res = ???
assert(res == bruteForce(a, b))
res
}
Run Code Online (Sandbox Code Playgroud)
这里有些例子
bruteForce( 5, 7) == 6 // binary 110 (1 trailing zero)
bruteForce( 1, 255) == 128 // binary 10000000
bruteForce(129, 255) == 192 // binary 11000000
Run Code Online (Sandbox Code Playgroud)
等等
如何foreachWithIndex在Scala集合上添加方法?
这是我到目前为止所能提出的:
implicit def iforeach[A, CC <: TraversableLike[A, CC]](coll: CC) = new {
def foreachWithIndex[B](f: (A, Int) => B): Unit = {
var i = 0
for (c <- coll) {
f(c, i)
i += 1
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用:
Vector(9, 11, 34).foreachWithIndex { (el, i) =>
println(el, i)
}
Run Code Online (Sandbox Code Playgroud)
引发以下错误:
error: value foreachWithIndex is not a member of scala.collection.immutable.Vector[Int]
Vector(9, 11, 34).foreachWithIndex { (el, i) =>
Run Code Online (Sandbox Code Playgroud)
但是,当我明确应用转换方法时,代码可以正常工作:
iforeach[Int, Vector[Int]](Vector(9, 11, 34)).foreachWithIndex { (el, i) =>
println(el, i) …Run Code Online (Sandbox Code Playgroud) scala implicit-conversion scala-collections enrich-my-library
我需要在OS X 10.6.6机器上运行git客户端,我没有管理员权限.
现在很遗憾,来自http://code.google.com/p/git-osx-installer/的安装程序没有本地安装选项,因此如果没有管理员帐户,它就无法运行.
什么是安装git的最快/最简单的方法,例如~/bin?
注意:虽然我可以从GitHub(我的项目来自)下载zip存档,但我需要能够快速提取新提交,因此这不是一个选项.
Fink没有OS X 10.6的二进制文件,如果没有管理员权限,MacPorts安装程序也无法运行.
我是Scala的新手,但有一些Java背景.
在编写Scala代码时,以这种样式处理Option参数很有用:
val text = Option("Text")
val length = text.map(s => s.size)
Run Code Online (Sandbox Code Playgroud)
但s => s.size据我所知,每一个都带来了新的Function1[A, B].如果我做了8次这样的转换,它将带来8个额外的类.绑定表单时,我非常重视这些片段,所以问题是:
我应该少用它,也许用if-notation代替它,或者类似泛滥对JVM不是很关键,或者Scala编译器可能会做某种魔术?
更新:一个更具体的例子是:
case class Form(name: Option[String], surname: Option[String])
val bindedForm = Form(Option("John"), Option("Smith"))
val person = new Person
bindedForm.name.foreach(a => person.setName(a))
bindedForm.surname.foreach(a => person.setSurname(a))
Run Code Online (Sandbox Code Playgroud)
它会产生两个不同的Function1[String, String]类吗?如果有数百次此类转换怎么办?
以下是浏览器中的有效查询(例如Firefox):
http://www.freesound.org/api/sounds/search/?q=barking&api_key=074c0b328aea46adb3ee76f6918f8fae
Run Code Online (Sandbox Code Playgroud)
产生一个JSON文档:
{
"num_results": 610,
"sounds": [
{
"analysis_stats": "http://www.freesound.org/api/sounds/115536/analysis/",
"analysis_frames": "http://www.freesound.org/data/analysis/115/115536_1956076_frames.json",
"preview-hq-mp3": "http://www.freesound.org/data/previews/115/115536_1956076-hq.mp3",
"original_filename": "Two Barks.wav",
"tags": [
"animal",
"bark",
"barking",
"dog",
"effects",
...
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Dispatch 0.9.4执行此查询.这是一个build.sbt:
scalaVersion := "2.10.0"
libraryDependencies += "net.databinder.dispatch" %% "dispatch-core" % "0.9.4"
Run Code Online (Sandbox Code Playgroud)
从sbt console,我做以下事情:
import dispatch._
val q = url("http://www.freesound.org/api/sounds/search")
.addQueryParameter("q", "barking")
.addQueryParameter("api_key", "074c0b328aea46adb3ee76f6918f8fae")
val res = Http(q OK as.String)
Run Code Online (Sandbox Code Playgroud)
但承诺总是以下列错误完成:
res0: dispatch.Promise[String] = Promise(!Unexpected response status: 301!)
Run Code Online (Sandbox Code Playgroud)
那么我做错了什么?这是API文档,如果有帮助的话.
我记得PaulP显示了一个很酷的技巧来缩短重复的长@specialized序列,但我不再找到原帖了.就像我一样
trait Foo[@specialized(Int, Float, Double, Long, Char, Boolean) A]
trait Bar[@specialized(Int, Float, Double, Long, Char, Boolean) A]
Run Code Online (Sandbox Code Playgroud)
有可能以某种方式对此进行别名......
type SpecDef = ???
trait Foo[SpecDef ??? A]
trait Bar[SpecDef ??? A]
Run Code Online (Sandbox Code Playgroud) 我正在尝试遵循scaladoc生成的sbt文档.我有一个多项目(即与子项目的聚合)构建,这是./build.sbt一般设置.我添加了以下示例中的最后一个条目:
scalacOptions in ThisBuild ++= Seq("-deprecation", "-unchecked", "-feature")
scalacOptions in ThisBuild += "-no-specialization"
// API docs
scalacOptions in ThisBuild in (Compile,doc) ++= Seq(
"-diagrams", "-doc-title", name.value
)
Run Code Online (Sandbox Code Playgroud)
这没有任何效果.scaladoc既不会尝试生成图表,也不会设置主文档标题,因此只会忽略这些设置.同样,如果我添加一个"-foobar"选项,则不会出现错误.
如何解决这个问题(在build.sbt,我不想进入project/Build.scala,谢谢)
我正在阅读"Scala in depth"的第一部分,第一部分有两个关于"covariance"和"contrvariance"的句子:
协方差(+ T或?extends T)是指类型可以在继承层次结构中强制转换.
逆变量(-T或?super T)是指类型可以强制继承层次结构.
我已经阅读了一些关于"协方差"和"逆变"的文件,但在这种背景下我无法理解"强迫"和"强迫"这个词.
我有一个 sbt 多项目构建,其中包含两个项目core和mac. 我没有聚合它们的根项目。不幸的是sbt 会自动创建一个。
如何防止发布这个虚拟聚合项目?我得到这样"default-6a1ca6"除了core与mac当我运行sbt publish-local。
我正在寻找类似的东西
autoRoot := false
Run Code Online (Sandbox Code Playgroud)
?
我有一个使用Swing的Scala 2.10.3项目.我有以下catch-22情况:
我可以编译
$ sbt -java-home /usr/lib/jvm/java-6-openjdk-amd64/ test:products
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行时:
$ sbt run
Run Code Online (Sandbox Code Playgroud)
sbt 认为JVM版本发生了变化,并尝试重新编译所有内容,从而因第一个问题而抛出编译错误.
sbt虽然使用不同的JVM,但我如何说服运行已编译的项目?使用assembly不是一种选择,因为这需要几分钟,我需要做很多事情.
我也尝试切换使用export JAVA_HOME,但这有同样的效果,sbt会尝试重新编译run.