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 您可能还想更新问题的标题,因此其他人更容易找到:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |