既然Dotty显然已经准备好编译更大的项目了,我想知道是否有一种简单的方法可以将它用作sbt项目中Scalac的替代品?就像我有以下内容build.sbt:
name := "Foo"
scalaVersion := "2.11.7"
Run Code Online (Sandbox Code Playgroud)
我可以采取一些步骤来替换Scalac for Dotc吗?
请考虑以下代码:
object foo {
trait Bar[Q[_]]
implicit object OptionBar extends Bar[Option]
def test[T, C[_]](c: C[T])(implicit bar: Bar[C]) = ()
def main(args: Array[String]) {
test(Some(42): Option[Int]) //???
}
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我需要输入Some(42)作为Option [Int],否则隐式对象OptionBar将不会被解析(因为预期会改为Bar [Some]).有没有办法避免显式输入,所以我在测试中得到隐含的OptionBar对象,即使我用Some或None提供测试?
[澄清]
Bar抽象类等它也应该工作.implicit object listBar extends Bar[list][更新]
似乎使Bar的参数逆变成功了:
object foo {
trait Bar[-Q[_]] //<---------------
implicit object OptionBar extends Bar[Option]
implicit object ListBar extends Bar[List]
def test[T, C[_]](c: C[T])(implicit bar: Bar[C]) = ()
def main(args:Array[String]) {
test(Some(42))
}
}
Run Code Online (Sandbox Code Playgroud)
但当然这是对Bar的可能性的严重限制,所以我仍然希望得到更好的答案.
我认为以下将是收集满足给定类型的集合元素的最简洁和正确的形式:
def typeOnly[A](seq: Seq[Any])(implicit tag: reflect.ClassTag[A]): Seq[A] =
seq.collect {
case tag(t) => t
}
Run Code Online (Sandbox Code Playgroud)
但这仅适用于AnyRef类型,而不适用于原语:
typeOnly[String](List(1, 2.3, "foo")) // ok. List(foo)
typeOnly[Double](List(1, 2.3, "foo")) // fail. List()
Run Code Online (Sandbox Code Playgroud)
显然直接形式有效:
List(1, 2.3, "foo") collect { case d: Double => d } // ok. List(2.3)
Run Code Online (Sandbox Code Playgroud)
所以必须有(简单!)方法来修复上述方法.
哪些是Scala的成熟,维护和灵活的开源遗传算法(GA)库?
理想情况下,在GitHub上,它可以最好地与我的工作流程集成.
我正在尝试使用新的sbt 0.13()设置一个多项目build.sbt.这个lazy val名字决定子项目名称的想法对我来说听起来很奇怪.此外,我没有得到连字符,但最终得到了骆驼案:
lazy val myprojectCore = project
Run Code Online (Sandbox Code Playgroud)
当我列出时> projects,我明白了myprojectCore.我该myproject-core怎么做?
另外,name现在关键的目的和关系是什么?
随着Ceylon 1.0的发布,一些人正在讨论联合类型的有用性.我想知道你如何简洁地编写以下代码:
String test(String | Integer x) {
if (x is String) {
return "found string";
} else if (x is Integer) {
return "found int";
}
return "why is this line needed?";
}
print(test("foo bar")); // generates 'timeout'... well, whatever
Run Code Online (Sandbox Code Playgroud)
......在斯卡拉?我的想法是这样的:
type | [+A, +B] = Either[A, B]
object is {
def unapply[A](or: Or[A]): Option[A] = or.toOption
object Or {
implicit def left[A](either: Either[A, Any]): Or[A] = new Or[A] {
def toOption = either.left.toOption
}
implicit def right[A](either: Either[Any, …Run Code Online (Sandbox Code Playgroud) 这很好用
class MyClass[T<: Actor: ClassTag] extends Actor {
//....
}
Run Code Online (Sandbox Code Playgroud)
但这不是由于错误 No ClassTag available for MyClass.this.T
class MyClass extends Actor {
type T<: Actor
//...
}
Run Code Online (Sandbox Code Playgroud)
即使执行以下操作:
class MyClass extends Actor {
type T<: Actor: ClassTag //this doesn't even compile
//...
}
Run Code Online (Sandbox Code Playgroud)
我如何使用摘要type并摆脱错误?
我已经从OS X切换到Linux,并试图习惯IDEA中的不同键盘快捷键.我找不到的一个非常重要的事情是"将光标移动到行的开头/结尾"(OS X上的Cmd-Left和Cmd-Right).同时查看参考卡并未显示任何有用的信息.
对于应用程序内帮助浏览器,我想呈现API文档.不幸的是,Scaladoc似乎只生成充满了可怕的JavaScript内容的HTML文件,因此即使使用相当重的组件(例如SwingBox(虽然它确实具有非常好的CSS))也无法呈现这些文件.
所以我的问题是:我可以利用Scaladoc工具或其API(如果有的话)生成一些中间表示,然后我可以将其写入自定义Markdown文件或静态HTML页面吗?
这是一个问题所以我不必遍历整个互联网来找到答案,因为scalac选项目前尚未发布.
当我有全局变量时,如何从Scala 2.12.2开始禁用这些警告"-Xlint"?
scala ×9
sbt ×3
type-erasure ×2
dotty ×1
implicit ×1
linter ×1
linux ×1
reflection ×1
scaladoc ×1
type-members ×1
types ×1