小编Bri*_*ent的帖子

Scala可以在一个表达式中应用多个隐式转换吗?

可能重复:
如何在Scala中链接implicits?

Scala可以在一个表达式中应用多个隐式转换吗?

考虑这个简单的例子:

  case class Wrapper(s: String)

  case class WrapperWrapper(w: Wrapper)

  implicit def string2Wrapper(s: String) = Wrapper(s)

  implicit def wrapper2WrapperWrapper(w: Wrapper) = WrapperWrapper(w)

  // implicit conversation -->  w = string2Wrapper("w")
  val w: Wrapper = "w"

  // implicit conversation -->  ww = wrapper2WrapperWrapper(w)
  val ww: WrapperWrapper = w

  // does NOT compile!
  // ideally --> sad = wrapper2WrapperWrapper(string2Wrapper("ww"))
  val sad: WrapperWrapper = "ww"
Run Code Online (Sandbox Code Playgroud)

有没有办法在最后一行中进行"双重"转换?

我可以通过定义另一个隐含的方式帮助事情:

implicit def string2WrapperWrapper(s:String) = wrapper2WrapperWrapper(s)
Run Code Online (Sandbox Code Playgroud)

但似乎不应该这样......

scala

4
推荐指数
2
解决办法
1367
查看次数

如何用JGit确定哪些分支已合并为master?

如何使用JGit确定哪些分支已合并为主分支?

我想做相当于普通的git命令:

git branch -a --merged
Run Code Online (Sandbox Code Playgroud)

这在JGit中可行吗?

jgit

3
推荐指数
1
解决办法
1278
查看次数

使用名为"clone"的隐式类方法编译错误

尝试使用名为的方法创建隐式类时,我收到意外的编译错误(在 2.11.8中)clone.

以下简化用法:

class Foo(val bar: String)

object Foo {
  implicit class Enrich(foo: Foo) {
    def clone(x: Int, y: Int): Int = x + y
  }
}

object Main extends App {
  val foo = new Foo("hello")
  println(foo.clone(1, 2))    // <- does not compile
}
Run Code Online (Sandbox Code Playgroud)

生成以下错误:

无法在Foo中访问类Object中的方法clone不允许受保护的方法clone,因为前缀类型Foo不符合访问发生的对象Main

但是,我可以手动应用隐式类,并成功编译:

println(Foo.Enrich(foo).clone(1, 2))    // <- OK
Run Code Online (Sandbox Code Playgroud)

如果我将方法重命名为其他东西(clone2例如),则代码按预期编译.

我假设这与魔法有关java.lang.Cloneable,但该方法并不期望参数.

那么这里发生了什么?

scala scala-2.11

3
推荐指数
1
解决办法
125
查看次数

Scala编译器是否公开了将Scala名称转换为基础JVM名称的功能?

我试图从Scala名称获取底层Java名称.

例如:

scala> trait `Foo~`
defined trait Foo$tilde

scala> magicTranslatorMethod("Foo~")
res0: String = Foo$tilde
Run Code Online (Sandbox Code Playgroud)

这个功能是在Scala编译器/反射/公共API的某个地方公开的吗?

scala

2
推荐指数
1
解决办法
34
查看次数

标签 统计

scala ×3

jgit ×1

scala-2.11 ×1