加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在构造函数中添加一些操作?

发布时间:2020-12-16 08:50:56 所属栏目:安全 来源:网络整理
导读:我相信天真的问题,但我发现只是从构造函数中调用其他构造函数.我需要调用一个方法.我的班级(开始): class ScopedIterator[T](val iter : Iterator[T]){ private var had_next : Boolean; private var value : T; moveNext(); ... 所以我想有一个带有单个参
我相信天真的问题,但我发现只是从构造函数中调用其他构造函数.我需要调用一个方法.我的班级(开始):

class ScopedIterator[T](val iter : Iterator[T])
{
  private var had_next : Boolean;
  private var value : T;

  moveNext();

  ...

所以我想有一个带有单个参数的构造函数,并在这样的构造函数中调用方法moveNext.就这样.

当我编译代码时,我得到错误:

error: abstract member may not have private modifier

private var had_next : Boolean;

和价值相同.

我改成了:

class ScopedIterator[T]
{
  private var had_next : Boolean;
  private var value : T;
  private var iter : Iterator[T];

  def this(it : Iterator[T]) =
  {
    iter = it;
    moveNext();
  }

  ...

但现在我得到“iter = it”的错误:

error: ‘this’ expected but identifier found.

iter = it;

如何在Scala中编写这样的构造函数?

解决方法

第一个问题是你对had_next和value的定义是抽象的:这些成员没有右侧.

尝试改为:

class ScopedIterator[T](val iter : Iterator[T]) {
  private var had_next : Boolean = _
  private var value : T = _
  ...
}

这里,_表示“默认未初始化值”.例如,以下适用于我在控制台中:

class ScopedIterator[T](val iter : Iterator[T]) {
  private var had_next : Boolean = _
  private var value : T = _

  init()

  def init() : Unit = { println("init !") }
}

scala> new ScopedIterator(List(1,2,3).toIterator)
init !
resN: ScopedIterator[Int] = ...

第二个问题(“’this’expect …”)之所以出现是因为在Scala中,辅助构造函数必须始终将另一个构造函数作为它们的第一个语句.所以你的构造函数可以从this()开始.有关更多详细信息,请参见Programming in Scala中的第6.7节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读