我已经从OS X切换到Linux,并试图习惯IDEA中的不同键盘快捷键.我找不到的一个非常重要的事情是"将光标移动到行的开头/结尾"(OS X上的Cmd-Left和Cmd-Right).同时查看参考卡并未显示任何有用的信息.
有没有办法PartialFunction通过case声明创建一个除外?
我很好奇,因为我想表达以下内容(scala pseudo ahead!)...
val bi = BigInt(_)
if (bi.isValidInt) bi.intValue
Run Code Online (Sandbox Code Playgroud)
......作为一个部分功能,并做
val toInt : PartialFunction[String, Int] = {
case s if BigInt(s).isValidInt => BigInt(s).intValue
}
Run Code Online (Sandbox Code Playgroud)
因为我创造了BigInt两次似乎是多余的.
在我有这样的事情(简化)之前,使用sbt 0.11.3:
// project/Build.scala
import sbt._
import Keys._
object MyBuild extends Build {
lazy val standardSettings = Defaults.defaultSettings ++ Seq(
version := "0.2",
scalaVersion := "2.9.2"
)
lazy val main = Project(
id = "main",
base = file( "." ),
settings = standardSettings,
aggregate = Seq( sub )
)
lazy val sub = Project(
id = "main-sub",
base = file( "sub" ),
settings = standardSettings
)
}
Run Code Online (Sandbox Code Playgroud)
但是我想在普通build.sbt文件中保留尽可能多的信息.所以现在我有
// build.sbt
version := "0.2"
scalaVersion := "2.9.2"
Run Code Online (Sandbox Code Playgroud)
和
// …Run Code Online (Sandbox Code Playgroud) 由于auxWindows下的包名称存在问题,我正在我的库的包层次结构中移动一个帮助器类
de.sciss.scalainterpreter.aux
Run Code Online (Sandbox Code Playgroud)
至
de.sciss.scalainterpreter
Run Code Online (Sandbox Code Playgroud)
该类是图书馆私有的,即private[scalainterpreter] object Helper.
现在使用Typesafe Migration-Manager,显然它报告更改不兼容:
Found 2 binary incompatibiities
===============================
* class de.sciss.scalainterpreter.aux.Helper does not have a correspondent
in new version
* object de.sciss.scalainterpreter.aux.Helper does not have a correspondent
in new version
Run Code Online (Sandbox Code Playgroud)
但我怀疑如果客户端代码没有调用任何一个对象,那么接口仍然是兼容的,因此我可以使用次要版本增加来指示更改,并允许这两个版本可以互换使用.
正确?
scala binary-compatibility package-private migration-manager
虽然在另一个问题上开头,但我遇到了似乎相关的不同谜语.这是其中之一:
trait Sys[S <: Sys[S]] {
type Peer <: Sys[Peer]
}
trait Fenced {
type Peer <: Sys[Peer]
}
def makeFence[S <: Sys[S]] = new Fenced { type Peer = S#Peer }
Run Code Online (Sandbox Code Playgroud)
错误如下:
error: overriding type Peer in trait Fenced with bounds >: Nothing <: Sys[this.Peer];
type Peer has incompatible type
def makeFence[S <: Sys[S]] = new Fenced { type Peer = S#Peer }
^
Run Code Online (Sandbox Code Playgroud)
为什么?(也试图自我类型添加_:S =>到Sys,没有问题)
虽然Rex的答案使得构造Fenced对象成为可能,但它并没有真正解决我在使用类型投影(S#Peer)时表示类型字符丢失的问题.我想出了另一种造成更严格限制的情景; 我认为这是核心问题:
trait …Run Code Online (Sandbox Code Playgroud) types scala abstract-type type-projection bounded-quantification
以下是我的错误:
trait Foo[A]
class Bar[A](set: Set[Foo[A]] = Set.empty)
Run Code Online (Sandbox Code Playgroud)
这产生了
<console>:8: error: polymorphic expression cannot be instantiated to expected type;
found : [A]scala.collection.immutable.Set[A]
required: Set[Foo[?]]
class Bar[A](set: Set[Foo[A]] = Set.empty)
^
Run Code Online (Sandbox Code Playgroud)
我必须重复类型参数,这非常烦人Set.empty.为什么类型推断失败了这个默认参数?以下作品:
class Bar[A](set: Set[Foo[A]] = { Set.empty: Set[Foo[A]] })
Run Code Online (Sandbox Code Playgroud)
请注意,这与此无关Set:
case class Hallo[A]()
class Bar[A](hallo: Hallo[A] = Hallo.apply) // nope
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这不仅有效:
class Bar[A](hallo: Hallo[A] = Hallo.apply[A])
Run Code Online (Sandbox Code Playgroud)
......还有这个:
class Bar[A](hallo: Hallo[A] = Hallo()) // ???
Run Code Online (Sandbox Code Playgroud) 我可以得到一个Type从TypeTag[A]使用tpe方法.但我还可以从类型中恢复类型标记吗?
import scala.reflect.runtime.{universe => ru}
import ru.{Type, TypeTag}
def forward[A](implicit tt: TypeTag[A]): Type = tt.tpe
def backward(t: Type): TypeTag[_] = ???
Run Code Online (Sandbox Code Playgroud)
原因是我有一个API使用类型标签作为地图的键,但在某些时候我只有类型并删除了标签.
sbt中一个相当新的"特征",可能是0.13.7或0.13.8,是一种非常烦人的行为,不再能找到传递依赖.
例如.我有一个项目A依赖于库B版本1.25.1,它依赖于库C版本1.13.1.当然,只有库依赖关系B在A中定义,因为我不想定义几十个子库的整个树.好的,这构建.
现在我将A中的依赖项更新为库B版本1.25.2,而后者依赖于库C版本1.13.2.现在,sbt抱怨相当无用的消息"在库-C中找不到配置; 1.13.2:'master'.它需要从库-B; 1.25.2编译",然后是"未解析的依赖"异常.Sbt甚至懒得从Maven Central下载库C版本1.13.2,或者实际上发现它已经在本地发布."解决"这个问题的唯一方法是将库C版本1.13.2的依赖性添加到项目A中,这正是我不想做的事情.
这是打印输出的示例:
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: de.sciss#scalacolliderugens-core_2.11;1.13.2: configuration not found in de.sciss#scalacolliderugens-core_2.11;1.13.2: 'master'. It was required from de.sciss#scalacolliderswing-core_2.11;1.25.2 compile
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn] Note: Unresolved dependencies path:
[warn] de.sciss:scalacolliderugens-core_2.11:1.13.2
[warn] +- de.sciss:scalacolliderugens-plugins_2.11:1.13.2
[warn] +- de.sciss:scalacolliderswing-core_2.11:1.25.2 (/home/hhrutz/Documents/devel/SoundProcesses/build.sbt#L167)
[warn] +- de.sciss:soundprocesses-compiler_2.11:2.20.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
我想这是sbt中的一个烦人的错误,或者是否有一些更深层次的推理背后无法解决我无法理解的传递依赖?
如果我RunningGraph在Akka Stream 创建了一个,我怎么知道(从外面)
我试图从地图及其键中拉出最大值.例如:
val map = Map('a' -> 100, 'b' -> 23, ... 'z' -> 56)
如果100是最大值,我将如何拉('a',100)?我基本上想要使用Map.max但是按值而不是键搜索.