现在我以某种方式搞砸了我的全局sbt插件(~/.sbt/plugins/build.sbt).它们总是可以很好地检索Scala 2.9.1,这似乎是sbt 0.11.3想要的版本,并且所有插件(sbt-gpg-plugin,sbt-idea-plugin)都是针对2.9.1发布的.
无论我做什么,它都会一直试图找到它们建立在2.9.2之上:
[warn] Note: Some unresolved dependencies have extra attributes. Check that these dependencies exist with the requested attributes.
[warn] com.github.mpeltonen:sbt-idea:1.0.0 (sbtVersion=0.11.3, scalaVersion=2.9.2)
[warn] com.jsuereth:xsbt-gpg-plugin:0.6 (sbtVersion=0.11.3, scalaVersion=2.9.2)
...
[error] {file:...}default-50be6e/*:update: sbt.ResolveException: unresolved dependency: com.github.mpeltonen#sbt-idea;1.0.0: not found
Run Code Online (Sandbox Code Playgroud)
我该怎么解决这个问题,所以sbt像以前一样检索Scala 2.9.1的插件?
为了完整起见,这是我的文件照顾建议的方式:
// project-home/build.sbt
scalaVersion := "2.9.2"
...
Run Code Online (Sandbox Code Playgroud)
// project-home/project/plugins.sbt
resolvers += "less is" at "http://repo.lessis.me"
addSbtPlugin( "me.lessis" % "ls-sbt" % "0.1.1" )
scalaVersion := "2.9.1" // "just in case it helps"
Run Code Online (Sandbox Code Playgroud)
// ~/.sbt/plugins/build.sbt
scalaVersion := "2.9.1" …Run Code Online (Sandbox Code Playgroud) 路径相关类型很有用:
trait Sys {
type Global
}
def foo[S <: Sys](system: S)(global: system.Global) = ()
Run Code Online (Sandbox Code Playgroud)
为什么这对构造函数不起作用?
class Foo[S <: Sys](val system: S)(val global: system.Global)
Run Code Online (Sandbox Code Playgroud)
或者我只是做错了?
我试图通过使用下限创建新的不可变类型的方法来了解协方差
class ImmutableArray[+T](item: T, existing: List[T] = Nil) {
private val items = item :: existing
def append[S >: T](value: S) = new ImmutableArray[S](value, items)
}
Run Code Online (Sandbox Code Playgroud)
我知道type参数T不能在append方法中使用,因为它违反了规则但是如果我说一个Customer类和子类Student我仍然可以创建类型U Student.
我可以看到这有效,但为什么这不违反规则?我可以理解,如果我有一个Students 列表然后添加了一个Customer我只能返回一个Customers 列表,因为它不允许Customer分配给a,Student因为它是父类型.但为什么我可以使用Student?
我错过了什么?
谢谢布莱尔
是否可以使用更高kinded类型的上下文边界语法快捷方式?
trait One { def test[W : ClassManifest]: Unit } // first-order ok
trait Two { def test[W[_]: ClassManifest]: Unit } // not possible??
trait Six { def test[W[_]](implicit m: ClassManifest[W[_]]): Unit } // hmm...
Run Code Online (Sandbox Code Playgroud) 由于Scala 2.10.1即将推出,我相信,我想确保我现在发布的工件将自动使用该版本的scala-library.jar.我使用sbt 0.12.2发布,并设置为
scalaVersion := "2.10.0"
Run Code Online (Sandbox Code Playgroud)
我正确地将二进制兼容版本附加到我的工件,例如
<artifactId>mylibrary_2.10</artifactId>
Run Code Online (Sandbox Code Playgroud)
...但scala库依赖关系仍然说2.10.0:
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.0</version> <!-- !!! -->
</dependency>
Run Code Online (Sandbox Code Playgroud)
我想这是不正确的,它应该使用2.10或2.10.+这里?
我也尝试添加,scalaBinaryVersion := "2.10"但似乎没有改变任何东西.
我的另一个想法是使用scalaVersion := "2.10.+".Sbt需要永远Getting Scala 2.10.+ ...,但它终于很好,pom现在scala-library.jar有这个版本.那么也许这是正确的方法?
"""使用字符串插值和换行符时,我得到三重引号字符串的结果:
val foo = "bar"
s"""$foo"""
Run Code Online (Sandbox Code Playgroud)
还行吧.
s"""
$foo
"""
Run Code Online (Sandbox Code Playgroud)
这是错误的,我得到以下输出:
"
bar
"
Run Code Online (Sandbox Code Playgroud)
为什么有引号?
在将具有默认实现的方法添加到特征时,我对后向兼容性感到困惑.喜欢:
以前的版本
trait Foo
Run Code Online (Sandbox Code Playgroud)
新版本
trait Foo {
def verifyConsistency: Option[String] = ??? // provide default implementation
}
Run Code Online (Sandbox Code Playgroud)
该迁移管理器报告这除了为二进制不兼容.那是对的吗?
我几乎可以肯定我读到/看到某个地方最新的sbt版本允许我将特定于Scala版本的特定源放置在特定目录中,这样它们就可以scalaVersion自动拾取,而不必动摇unmanagedSourceDirectories并创建源过滤设置.喜欢
src/main/scala/worksInAllVersions.scala
src/main/scala_211???/myTraitForScala211.scala
src/main/scala_210???/myTraitForScala210.scala
Run Code Online (Sandbox Code Playgroud)
是这样吗?该文档不提任何东西.
我希望扩展迭代器来创建一个新方法takeWhileInclusive,它将像takeWhile最后一个元素一样运行.
我的问题是扩展迭代器以返回一个我希望延迟评估的新迭代器的最佳实践.来自C#背景我正常使用IEnumerable并使用yield关键字,但这样的选项似乎不存在于Scala中.
例如,我可以
List(0,1,2,3,4,5,6,7).iterator.map(complex time consuming algorithm).takeWhileInclusive(_ < 6)
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,takeWhileInclusive只有解析值的谓词,直到我得到大于6的结果,并且它将包括第一个结果
到目前为止我有:
object ImplicitIterator {
implicit def extendIterator(i : Iterator[Any]) = new IteratorExtension(i)
}
class IteratorExtension[T <: Any](i : Iterator[T]) {
def takeWhileInclusive(predicate:(T) => Boolean) = ?
}
Run Code Online (Sandbox Code Playgroud) 据我所知,CSS无法指定链接的target属性<a>.我希望能够使用以下输出在基于Jekyll的markdown文档中生成外部链接:
<a href="the-url" class="external" target="_blank">the text</a>
Run Code Online (Sandbox Code Playgroud)
不诉诸这样的事情:
[the text](the url){:target"_blank" class="external"}
Run Code Online (Sandbox Code Playgroud)
我不想target在每个链接中硬编码,因为我可能想在某个时候改变它,也是吵闹.理想情况下,我会有
[the text](the url){:class="external"}
Run Code Online (Sandbox Code Playgroud)
...但是CSS无法添加target="_blank".
所以我的想法是一个允许我写的自定义插件
{% ext-link the-url the text %}
Run Code Online (Sandbox Code Playgroud)
这样的插件存在吗?有没有更好的方法来实现这一目标?