小编ams*_*ams的帖子

冲突的嵌套继承特征

假设我有以下代码:

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)

当我在混合Trait1Trait2,指的Inner似乎默认为Inner取其特点我混入第二类型; 所以当我打电话 …

scala traits

7
推荐指数
1
解决办法
1219
查看次数

Scala和尾递归

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)

scala tail-recursion

4
推荐指数
1
解决办法
1917
查看次数

标签 统计

scala ×2

tail-recursion ×1

traits ×1