gpt4 book ai didi

scala - "without"某种类型的抽象签名

转载 作者:行者123 更新时间:2023-12-04 21:43:03 28 4
gpt4 key购买 nike

我想要一个类型的方法来返回它混合到的类型。例如,本着以下精神的东西:

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

所以在类型 A with B with C 的情况下,方法 withoutA会有签名 B with C , 在 A with 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

最佳答案

这里暗中刺伤,但类型否定 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

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

关于scala - "without"某种类型的抽象签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21349986/

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