相关疑难解决方法(0)

如何在Scala中的主构造函数中定义局部var/val?

在Scala中,类的主构造函数没有显式主体,但是从类主体隐式定义.那么,如何区分字段和本地值(即构造函数方法的本地值)?

例如,请使用以下代码片段,这是"Scala中的编程"中的一些示例代码的修改形式:

class R(n: Int, d: Int) {
   private val g = myfunc
   val x = n / g
   val y = d / g
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,这将生成一个包含三个字段的类:私有"g",以及公共"x"和"y".但是,g值仅用于计算x和y字段,并且除了构造函数范围之外没有任何意义.

所以在这个(公认的人为的)例子中,你如何为这个构造函数定义局部值?

scala scala-primary-constructor

60
推荐指数
4
解决办法
6942
查看次数

避免Scala内存泄漏 - Scala构造函数

我正在阅读"Scala编程"一书,并Rational在第6章的实现中遇到了一些问题.

这是我Rational班级的初始版本(基于本书)

class Rational(numerator: Int, denominator: Int) {
  require(denominator != 0)

  private val g = gcd(numerator.abs, denominator.abs)

  val numer = numerator / g
  val denom = denominator / g

  override def toString  = numer + "/" + denom

  private def gcd(a: Int, b: Int): Int =
    if(b == 0) a else gcd(b, a % b)

  // other methods go here, neither access g
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,字段g在类的生命周期内保持不变,即使从未再次访问过.运行以下模拟程序可以看到此问题:

object Test extends Application {

  val a = new Rational(1, 2) …
Run Code Online (Sandbox Code Playgroud)

memory-leaks scala

9
推荐指数
4
解决办法
4692
查看次数