gpt4 book ai didi

scala - 在Scala中转发类引用?

转载 作者:行者123 更新时间:2023-12-04 13:35:08 25 4
gpt4 key购买 nike

作为Scala的新手,我遇到了一个标准问题:如何以这样的方式定义两个类,使得我可以创建一个实例,而另一个实例作为成员变量,而后者又指向第一个实例?

我想结束
游戏实例
成员类型为Dealer的成员
它具有Game类型的成员,实际上是原始Game实例

因此,在这种情况下,每个实例(游戏,经销商)都有一个成员,即另一个实例。谁能指导我正确的方法吗?

最佳答案

如果确实需要使类不可变,则唯一的选择是在构造函数中按名称使用参数,并始终将实例创建为惰性val:

class Dealer(val name: String, g: => Game) {
lazy val game = g
override def toString = "Dealer(name=%s, game=%s)".format(name, game.name)
}

class Game(val name: String, d: => Dealer) {
lazy val dealer = d
override def toString = "Game(name=%s, dealer=%s)".format(name, dealer.name)
}

lazy val game: Game = new Game("Doppelkopf", new Dealer("Peter", game))
lazy val dealer: Dealer = new Dealer("Tina", new Game("Poker", dealer))

请注意,您需要在惰性val上输入类型说明,否则它将无法编译。

关于scala - 在Scala中转发类引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4061895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com