gpt4 book ai didi

scala - 可以在实例化对象之前引用对象的成员吗?

转载 作者:行者123 更新时间:2023-12-01 10:21:59 25 4
gpt4 key购买 nike

这是我想要做的(警告:前面的 Scala 非常糟糕):

def assignToFour[X](x : X, y : Something[X]) =  x.y = 4

class M {
var m = 0;
}

val em = new M
assignToFour(em, M.m)
em.m == 4

显然,这根本行不通,但我正在寻找一种模式,允许我在抽象中引用实例的成员,然后在稍后的某个时间点,在实际实例上访问该成员.

如果这是 Java,我会使用反射,但反射很糟糕,我希望 Scala 比 Java 更糟糕,会有更好的选择。

最佳答案

所以:

  • Scala 的属性是作为一对方法实现的。对于 var m,getter 将被命名为 m,setter 方法将被命名为 m_=
  • 方法可以自动提升为函数
  • 函数可以作为一等值传递

从这里开始:

class M {
var m = 0
}

val x = new M

x.m 当前为 0,让我们更改它...下面是一个将函数作为参数的方法,并使用值 4 调用该函数:

def callWithFour(fn: Int=>Unit) = fn(4)

并使用它:

callWithFour(x.m_=)

其中 x.m_= 是实例 x 上的 m 属性的 setter 方法

x.m 现在等于四。

关于scala - 可以在实例化对象之前引用对象的成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4907741/

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