sách gpt4 ai đã đi

scala - 了解 DelayedInit

In lại 作者:行者123 更新时间:2023-12-04 11:53:11 27 4
mua khóa gpt4 Nike

我在看 DelayedInithiện hữu Scala in Depth ...

注释是我对代码的理解。

下面的 trait 接受一个非严格计算的参数(由于 => ),并返回 Unit .它的行为类似于构造函数。

trait DelayedInit {
def delayedInit(x: => Unit): Unit
}

据我了解 App ,此特征具有 var x等于 0 元的函数(无参数)。 x根据对 delayedInit 的调用进行分配方法。

Sau đó, chủ yếu将调用 apply '_()'hiện hữu x如果它有 Some(Function0[Unit])类型。如 xĐúng Không có ,那么什么都不会发生。
trait App extends DelayedInit {
var x: Option[Function0[Unit]] = None
override def delayedInit(cons: => Unit) {
x = Some(() => cons)
}
def main(args: Array[String]): Unit =
x.foreach(_())
}

然后,我按照书中的示例去了 REPL:
scala> val x = new App { println("Now I'm initialized") }
x: java.lang.Object with App = $anon$1@2013b9fb

我看到...的输出
scala> x.main(Array())
没什么。

应该建一个 App实例结果调用 delayedInit以便 x.main(Array())返回类似构造函数的行为?或者,更具体地说,应该 Now I'm initialized预计打印出来?

1 Câu trả lời

我猜你定义了自己的 DelayedInit trait 与 App 位于同一文件中.如果你这样做了,删除它,DelayedInitĐúng scala 中的一个特征包裹。

我刚刚从书中获取了代码并直接粘贴到 Eclipse 工作表中,它就可以工作了。

biên tập

发生的情况是,在您使用 new App { println("Now I'm initialized") } 创建的匿名 App 对象的构造函数之前,delayInit 中的代码被调用。您可以在此屏幕截图中看到它:

Worksheet showing the code being executed

如果您决定删除此行:

x = Some(() => cons)

你会看到 现在我已经初始化 从不打印。因为匿名的构造函数代码 App您正在创建的对象被赋予 delayedInit方法但永远不会在任何地方运行,所以 App的对象构造函数永远不会运行。

关于scala - 了解 DelayedInit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20649982/

27 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com