我在 scala 中遇到一些问题来解析隐式值,并且在 netbeans 中出现了神秘的错误消息:
“错误:前向引用超出了值的定义......”
或者在 scala 控制台中我有其他错误消息
“类型不匹配:29:错误:类型不匹配;发现:Factory.type(具有底层类型对象工厂)所需:通用工厂”
我的类和主要功能的一些描述:
import java.util.Random
//////////
// Main //
//Implicit random for all classes and object
implicit val aprng = new Random
//Implicit object Factory used in other class
implicit val factory = Factory
abstract class GenericFactory {
def build
}
object Factory extends GenericFactory{
def build = println("return factory")
}
class A (rate: Random => Double = aprng => aprng.nextFloat, val factory : GenericFactory) {
def this(rate : Double, factory : GenericFactory) = this( _ => rate, factory)
def operate(genomes: IndexedSeq[Int])(implicit aprng: Random) = {
println("calculate genomes with aprng random values")}
}
object B{
val instanceOfA = new A(rate => 0.5d,factory)
}
我有两个问题,因为1)我可以在类A的参数中传递一个对象,所以我定义了一个抽象类来传递这个抽象类,但这在这里不起作用:/
2) 之后,我在 A 类中定义的隐式值无法被识别,并且失败并显示错误消息。
您有解决这个问题的想法或答案吗?
Edit 1
我在 agisteel 的帮助下更新了代码,没问题,代码正在运行:)
import java.util.Random
//////////
// Main //
//Implicit random for all classes and object
implicit val aprng = new Random
implicit val function: Random => Double = arpng => arpng.nextFloat
abstract class GenericFactory
{
def build = println("build")
}
implicit object Factory extends GenericFactory
{
def build = println("return factory")
}
class A (implicit rate: Random => Double, implicit val factory : GenericFactory) {
//def this(rate : Double, factory : GenericFactory) = this( _ => rate, factory)
def operate(genomes: IndexedSeq[Int])(implicit aprng: Random) = {
println("calculate genomes with aprng random values")}
}
object B{
val instanceOfA = new A
}
我不确定您想在这里实现什么目标,但这里有一些提示:
1)代替:
implicit val factory = Factory
object Factory extends GenericFactory { ...
尝试这个:
implicit object Factory extends GenericFactory { ...
2) 据我所知,lambda 的默认值只能通过隐式提供,所以不要:
class A (rate: Random => Double = aprng => aprng.nextFloat, ...
尝试这个:
implicit val function: Random => Double = arpng => arpng.nextFloat
class A (implicit rate: Random => Double) ( ...
我希望这些信息有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)