加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – “forSome {val`?

发布时间:2020-12-16 09:34:59 所属栏目:安全 来源:网络整理
导读:我在 scala reference,26页的文件中看到: 3.2.10 Existential Types Syntax: Type ::= InfixType ExistentialClauses ExistentialClauses ::= ‘forSome’ ‘{’ ExistentialDcl {semi ExistentialDcl} ‘}’ ExistentialDcl ::= ‘type’ TypeDcl | ‘val
我在 scala reference,26页的文件中看到:

3.2.10 Existential Types

    Syntax:

        Type ::= InfixType ExistentialClauses
        ExistentialClauses ::= ‘forSome’ ‘{’ ExistentialDcl
                               {semi ExistentialDcl} ‘}’
        ExistentialDcl ::=   ‘type’ TypeDcl
                           | ‘val’ ValDcl

我已经看到很多代码用于一些并键入在一起,例如

List[T] forSome { type T; }

但是我从来没有看到过,有一些val,有没有样品?

解决方法

如果你想到这一点,你很快会意识到,唯一的时间值出现在类型中是路径依赖类型。例如:

trait Trait {
  val x: { type T }
  val y: x.T // path dependent type: here comes our val
}

将此应用于存在类型,我们现在可以轻松地为

type SomeList = List[v.T] forSome { val v : { type T }; }

上述类型表示其元素是路径依赖类型v.T的任何列表。

例如:

object X { 
  type T = String
  val x: T = "hello" 
}
val l1: SomeList = List(X.x) // compiles fine
val l2: SomeList = List(123) // does not compile

当然,SomeList也是没用的。通常,这种存在类型只会作为更大类型的一部分才是真正有用的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读