gpt4 book ai didi

scala - 从伴随对象中的特征访问字段

转载 作者:行者123 更新时间:2023-12-04 00:36:56 26 4
gpt4 key购买 nike

我有类似下面的代码(我简化了):

trait A {
val CONST_VALUE = 10
}

class B(someValue: Int, values: Array[Int]) extends A {
//some methods
}

object B {
def apply(someValue: Int) = B(someValue, Array.ofDim[Array[Byte]](someValue).map(block => Array.fill[Byte](A.CONST_VALUE)(0)))
}

基本上,我在特征 A 中声明了一个常量 CONST_VALUE。我试图在伴生对象 B 中使用它来实例化类 B。但是,我无法从伴随对象 B 访问 A.CONST_VALUE。(出现编译错误)。

那我该怎么做呢?

最佳答案

你不能这样做。

首先,object Bclass B的伴生对象,而不是trait A的伴生对象。 Companions 需要具有相同的名称并在相同的编译单元中定义。

其次,CONST_VALUEtrait A的一个实例字段。它是 Ainstance 的成员,而不是 A 的成员。

第三,当你说 A.CONST_VALUE 时,你基本上是在 A 上调用方法 CONST_VALUE。但是你只能调用对象/值的方法。 A 不是一个对象,它是一个类型,类型和值存在于不同的世界中,你不能将两者混为一谈。

第四,您的 CONSTANT_VALUE 被误导:只有 final val 是常量值定义,因此您的 CONSTANT_VALUE 实际上不是常量值(value)。

第五,你的 apply 方法调用自己(B()B.apply() 的语法糖),因此需要一个返回类型注释。

第六,你的apply方法用两个参数调用自己,但它只用一个参数定义。

第七,你创建了一个Array[Array[Byte]],但我不清楚你为什么要这样做以及你需要它做什么。

这是一大堆卡车的问题(特别是考虑到只有几行代码开始),您需要一个一个地解决这些问题。这是一种可能的部分解决方案,但我不清楚究竟您要达到什么目的。

trait A

object A {
final val CONST_VALUE = 10
}

class B(someValue: Int, values: Array[Int]) extends A {
//some methods
}

object B {
def apply(someValue: Int): B = new B(
someValue,
Array.ofDim[Array[Byte]](someValue).map(block => Array.fill[Byte](A.CONST_VALUE)(0)))
}

关于scala - 从伴随对象中的特征访问字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40320486/

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