gpt4 book ai didi

scala - 构建和使用自定义 scala-library 来扩展原始数据类型

转载 作者:行者123 更新时间:2023-12-02 10:51:16 26 4
gpt4 key购买 nike

对于研究原型(prototype),我希望能够使用附加字段扩展原始 Scala 数据类型(例如 Double)。这不可能开箱即用,因为 scala.Doublescala.runtime.RichDouble被宣布为 final .

这是我尝试过的:

  • 克隆 scala 存储库
  • 删除 final来自类 scala.runtime.RichDouble 的修饰符在文件 src/library/scala/runtime/RichDouble.scala
  • 使用 ant 编译 Scala:ant build-opt
  • 创建一个自定义类扩展 RichDouble :
    $ echo "class MyDouble extends scala.runtime.RichDouble {}" > MyDouble.scala
  • 编译MyDouble.scala使用自定义编译的 scala:
    $ build/pack/bin/scalac MyDouble.scala

  • 但是,这会导致以下错误:

    MyDouble.scala:1: error: illegal inheritance from final class RichDouble class



    strace 一起运行,自定义编译 scala-library.jar确实正在加载:
    $ strace -f ./build/pack/bin/scalac MyDouble.scala 2>&1 | grep scala-library
    stat("/my/custom/dir/scala/build/pack/lib/scala-library.jar", {st_mode=S_IFREG|0664, st_size=5682113, ...}) = 0

    我错过了什么?为什么是类 RichDouble仍报告为 final即使我删除了修饰符?

    最佳答案

    你可以看看implicit classes :它们旨在扩展封闭类。

    implicit class MyDouble(d: Double) {
    def myNewFeature() = println("MyDouble is $d")
    }
    val d1 = new Double(42) // just instantiate a Double
    d1.myNewFeature() // scala will do implicit conversion

    关于scala - 构建和使用自定义 scala-library 来扩展原始数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47792536/

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