假设我有以下代码:
trait Trait1 {
trait Inner {
val name = "Inner1"
}
}
trait Trait2 {
trait Inner {
val name = "Inner2"
}
}
class Foo extends Trait1 with Trait2 {
// I want Concrete1 to be a Trait1.Inner not a Trait2.Inner
class Concrete1 extends Inner
val c = new Concrete1
}
object Obj {
def main(args: Array[String]): Unit = {
val foo = new Foo
println(foo.c.name)
}
}
Run Code Online (Sandbox Code Playgroud)
当我在混合Trait1和Trait2,指的Inner似乎默认为Inner取其特点我混入第二类型; 所以当我打电话 …
Stack Overflow上有各种答案,它解释了Scala中尾递归的条件.我理解限制以及如何以及在哪里可以利用尾递归.我不理解的部分是为什么存在对私有或最终方法的限制.
我还没有研究过Scala编译器如何在字节码级别将递归函数实际转换为非递归函数,但我们假设它执行类似下面的操作.我有一个Foo具有递归函数的类mod:
class Foo {
def mod(value: Int, denom: Int): Int = {
if(denom <= 0 || value <= 0) 0
else if(0 <= value && value < denom) value
else mod(value - denom, denom)
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个基本的模数函数,我想Scala编译器转换为某种伪Java-Scala,如:
class Foo {
def mod(value: Int, denom: Int): Int = {
if(denom <= 0 || value <= 0) return 0
while(value > denom) value -= denom
return value
}
}
Run Code Online (Sandbox Code Playgroud)
(我可以相信我搞砸了那个翻译,但我不认为细节很重要..)
所以现在假设我是子类Foo:
class …Run Code Online (Sandbox Code Playgroud)