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

scala – “没有”某种类型的抽象签名

发布时间:2020-12-16 18:30:31 所属栏目:安全 来源:网络整理
导读:我想要一个类型的方法来返回它混合的类型.例如,具有以下精神: trait A { def withoutA: this.type without A} 因此,在类型A与B与C的情况下,没有A的方法将具有带C的签名B,在A的情况下具有D – 只有D. 这是可以实现的,如果是这样的话? 以下是如何使用它的示
我想要一个类型的方法来返回它混合的类型.例如,具有以下精神:

trait A {
  def withoutA: this.type without A
}

因此,在类型A与B与C的情况下,没有A的方法将具有带C的签名B,在A的情况下具有D – 只有D.

这是可以实现的,如果是这样的话?

以下是如何使用它的示例:

trait Limit {
  def limit(a: Int): this.type without Limit
}
trait Offset {
  def offset(a: Int): this.type without Offset
}
val sqlBuilder = new Limit with Offset { ... }
sqlBuilder.limit(2).offset(4) // valid code
sqlBuilder.offset(4).limit(2) // valid code
sqlBuilder.limit(2).limit(4) // invalid code

解决方法

在这里黑暗中刺,但Negation as defined by shapeless的类型可能在这里工作.

type ?[A] = A => Nothing

trait A {
  def withoutA: this.type with ?[A]
}

现在没有访问REPL,我没有机会测试这个.我也有兴趣知道用例.

更新:

如果您真正想要的是一个构建器,在您使用它们时逐渐减少可用的操作,那么幻像类型和类型安全构建器模式就可以解决:

http://james-iry.blogspot.co.uk/2010/10/phantom-types-in-haskell-and-scala.html

http://blog.rafaelferreira.net/2008/07/type-safe-builder-pattern-in-scala.html

您可能还想更新问题的标题,因此其他人更容易找到:)

(编辑:李大同)

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

    推荐文章
      热点阅读