小编0__*_*0__的帖子

如何通知SBT使用插件的特定scala版本?

现在我以某种方式搞砸了我的全局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)

scala sbt

12
推荐指数
1
解决办法
1万
查看次数

依赖类型不适用于构造函数?

路径相关类型很有用:

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)

或者我只是做错了?

constructor scala path-dependent-type

12
推荐指数
1
解决办法
723
查看次数

Scala协方差和下限类型解释

我试图通过使用下限创建新的不可变类型的方法来了解协方差

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

我错过了什么?

谢谢布莱尔

generics scala type-bounds

12
推荐指数
2
解决办法
2484
查看次数

具有更高kinded类型的上下文边界快捷方式

是否可以使用更高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 higher-kinded-types context-bound

11
推荐指数
2
解决办法
1529
查看次数

sbt发布工件中的scala-library.jar版本

由于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有这个版本.那么也许这是正确的方法?

scala sbt sbt-0.12

11
推荐指数
1
解决办法
848
查看次数

带三重引号和多行的字符串插值

"""使用字符串插值和换行符时,我得到三重引号字符串的结果:

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)

为什么有引号?

scala string-interpolation

11
推荐指数
1
解决办法
9648
查看次数

是否添加了一个具有实现破坏向后兼容性的特征方法?

在将具有默认实现的方法添加到特征时,我对后向兼容性感到困惑.喜欢:

以前的版本

trait Foo
Run Code Online (Sandbox Code Playgroud)

新版本

trait Foo {
  def verifyConsistency: Option[String] = ??? // provide default implementation
}
Run Code Online (Sandbox Code Playgroud)

迁移管理器报告这除了为二进制不兼容.那是对的吗?

scala binary-compatibility migration-manager

11
推荐指数
1
解决办法
960
查看次数

sbt中Scala版本特定的源目录是什么?

我几乎可以肯定我读到/看到某个地方最新的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)

是这样吗?该文档不提任何东西.

scala sbt

11
推荐指数
1
解决办法
457
查看次数

Scala,扩展了迭代器

我希望扩展迭代器来创建一个新方法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)

iterator scala lazy-evaluation extend enrich-my-library

10
推荐指数
2
解决办法
1881
查看次数

Jekyll:为外部链接(目标和CSS类)生成自定义HTML

据我所知,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)

这样的插件存在吗?有没有更好的方法来实现这一目标?

css liquid jekyll kramdown

10
推荐指数
2
解决办法
3450
查看次数