gpt4 book ai didi

scala - Scala 是强类型的吗?

转载 作者:行者123 更新时间:2023-12-04 19:03:45 25 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

6年前关闭。




Improve this question



  • Scala 是强类型的吗?你有例子它是如何反射(reflect)在语言类型系统中的吗? Scala 是否允许类型双关语?它允许强制吗?
  • Scala 有像 ML 那样的多类型吗?

  • 谢谢!

    最佳答案

  • .

  • 由于强类型,它不允许“类型双关语”,因为我理解它在 C 语言中使用。但是,您有子类型,因此您可以安全地使用类型 A 的值。其中类型为 B 的值被请求,如果 A <: B ( AB 的子类型或更具体)。

    您可以使用 a.asInstanceOf[B] 强制类型,但是这将在运行时进行类型检查,如果 a 会导致抛出异常。不是 B 的子类型,除了在 JVM 上删除的更高级的类型,这意味着只有在引用类型参数的实际值之后才会抛出此类异常。

    另一个异常(exception)是结构类型,虽然类型安全,但它可以被认为是“双关语”:
    // ordinary type
    trait Foo {
    def bar: Int
    }

    // structural type
    type Bar = Any {
    def bar: Int
    }

    def test(b: Bar) = b.bar

    test(new Foo { val bar = 1234 }) // allowed

    这被认为是很少使用的高级功能,甚至可能在 future 的 Scala 版本中被弃用。它需要运行时反射,因此会带来性能损失。

    您也可以使用特殊的 Dynamic trait 放弃静态类型系统。 .或者你可能会做一些疯狂的事情 using macros实现你自己的双关语。
  • 不知道,不是机器学习专家。但如果 polytype 只是意味着 this ,那么这看起来像普通的高级(参数化)类型或“泛型”,答案是 .
  • 示例:身份函数:def identity[A](x: A): A = x
  • 示例:单一类型参数:trait Option[+A] { def get: A }
  • 关于scala - Scala 是强类型的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574220/

    25 4 0
    文章推荐: ruby - Ubuntu:如何使用 ruby​​ 应用程序添加 Systray 通知图标?
    文章推荐: ide - 代码块中的复制/粘贴功能
    文章推荐: internet-explorer - 在 IE 上的 或