gpt4 book ai didi

scala - 值 * 不是类型参数 Int 的成员

转载 作者:行者123 更新时间:2023-12-02 03:41:27 24 4
gpt4 key购买 nike

package impatient.mapsAndTups.objects


abstract class UnitConversion {
def convert[T](x: T): T
}

class Inches2Centimeters extends UnitConversion {
override def convert[Int](x: Int): Int = x * 100
}

object Conversions extends App {
val c = new Inches2Centimeters()

println(c.convert(15))
}

我不明白为什么前面的代码无法编译。我收到错误:

Error:(9, 46) value * is not a member of type parameter Int
override def convert[Int](x: Int): Int = x * 100

我可以做什么来解决这个问题?

最佳答案

您已在方法 convert 的范围内使用您自己的 Int 来“隐藏”标准类型 Int。这是因为您将 convert 定义为使用名称为 Int 的参数类型,并且该类型将由调用者定义(和类型推断)。

修复代码的一种方法如下,尽管我自己不会这样做。

package impatient.mapsAndTups.objects

abstract class UnitConversion {
def convert[T](x: T): T
}

class Inches2Centimeters extends UnitConversion {
def convert[T](x: T): T = x match {
case t: Int => (t * 100).asInstanceOf[T]
}
}

object Conversions extends App {
val c = new Inches2Centimeters()

println(c.convert(15))
}

另请注意,您不需要覆盖具体类中的转换。

相反,我会使用“typeclass”数字,如下所示:

package impatient.mapsAndTups.objects

abstract class UnitConversion {
def convert[T: Numeric](x: T): T
}

class Inches2Centimeters extends UnitConversion {

def convert[T: Numeric](x: T): T = {
val n = implicitly[Numeric[T]]
n.times(n.fromInt(100), x)
}
}

object Conversions extends App {
val c = new Inches2Centimeters()

println(c.convert(15))
}

关于scala - 值 * 不是类型参数 Int 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478503/

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