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.就这样. 当我编译代码时,我得到错误:
和价值相同. 我改成了: 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”的错误:
如何在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节. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |