【发布时间】:2020-07-07 05:27:55
【问题描述】:
我是 Scala 的新手,我正在测试一个用于转换测量值的脚本。它由隐式对象实现。我使用 REPL 准备它,但是当我尝试在 Eclipse Scala IDE 中使用时,出现错误指示 expected class or object definition convertir.scala /helloworld/src/main/scala line 12 Scala Problem
REPL 不报任何错误,可以测试:
$ scala
Welcome to Scala 2.12.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144).
Type in expressions for evaluation. Or try :help.
scala> trait Convertir[C] { def conversion(c:C): Double }
defined trait Convertir
scala> case class InchToFoot(inc: Double)
defined class InchToFoot
scala> case class MileToKm(mil: Double)
defined class MileToKm
scala> case class PoundToKilo(pnd: Double)
defined class PoundToKilo
scala> implicit object Foot extends Convertir[InchToFoot] { override def conversion(foot:InchToFoot): Double = { foot.inc/12 }}
defined object Foot
scala> implicit object Km extends Convertir[MileToKm] { override def conversion(km:MileToKm): Double = { km.mil*1.609344 }}
defined object Km
scala> implicit object Kilo extends Convertir[PoundToKilo] { override def conversion(kilo:PoundToKilo): Double = { kilo.pnd*0.45359237 }}
defined object Kilo
scala> def convertirA[C](convertir: C)(implicit converImpl: Convertir[C]) : Double = converImpl.conversion(convertir)
convertirA: [C](convertir: C)(implicit converImpl: Convertir[C])Double
scala> convertirA(new InchToFoot(10))
res0: Double = 0.8333333333333334
scala> convertirA(new MileToKm(10))
res1: Double = 16.09344
scala>
在Scala IDE中,隐式对象似乎有错误或没有导入,脚本和图片如下。 Scala IDE 中缺少用于重新创建与 REPL 相同的结果的部分。
感谢专家!!
trait Convertir[C] { def conversion(c:C): Double }
case class InchToFoot(inc: Double)
case class MileToKm(mil: Double)
case class PoundToKilo(pnd: Double)
implicit object Foot extends Convertir[InchToFoot] {
override def conversion(foot:InchToFoot): Double = { foot.inc/12 }}
implicit object Km extends Convertir[MileToKm] {
override def conversion(km:MileToKm): Double = { km.mil*1.609344 }}
implicit object Kilo extends Convertir[PoundToKilo] {
override def conversion(kilo:PoundToKilo): Double = { kilo.pnd*0.45359237 }}
def convertirA[C](convertir: C)(implicit converImpl: Convertir[C]) : Double = converImpl.conversion(convertir)
object Main3 extends App {
convertirA(new InchToFoot(10))
convertirA(new MileToKm(10))
convertirA(new PoundToKilo(10))
}
【问题讨论】:
-
没有太多答案,但您可能不应该使用基于 Eclipse 的 Scala IDE,因为它的最新版本是 2017 年。尝试使用 Scala 插件或 VSCode 或一些文本查看 Intellij Idea编辑器 + 金属语言服务器。
标签: eclipse scala read-eval-print-loop