可能重复:
如何在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)
但似乎不应该这样......
如何使用JGit确定哪些分支已合并为主分支?
我想做相当于普通的git命令:
git branch -a --merged
Run Code Online (Sandbox Code Playgroud)
这在JGit中可行吗?
尝试使用名为的方法创建隐式类时,我收到意外的编译错误(在scala 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名称获取底层Java名称.
例如:
scala> trait `Foo~`
defined trait Foo$tilde
scala> magicTranslatorMethod("Foo~")
res0: String = Foo$tilde
Run Code Online (Sandbox Code Playgroud)
这个功能是在Scala编译器/反射/公共API的某个地方公开的吗?