Scala 是否可以“自动”或隐式地丰富匿名函数?
鉴于: 我认为所有枚举值都可以隐藏到一个单独的特征中:Scala 是否可以“自动”或隐式地丰富匿名函数?,scala,Scala,鉴于: 我认为所有枚举值都可以隐藏到一个单独的特征中: enum Car { Mustang, Camaro, Challenger } enum Driver { Bob, John, Mike } trait Config { def car:Car def driver:Driver def collect[O](f:PartialFunction[(Car,Driver),O]):O } def canDrive(config:Config):Boolean = conf
enum Car { Mustang, Camaro, Challenger }
enum Driver { Bob, John, Mike }
trait Config {
def car:Car
def driver:Driver
def collect[O](f:PartialFunction[(Car,Driver),O]):O
}
def canDrive(config:Config):Boolean = config collect {
//what should 'collect' accept in order to satisfy the following:
// (1) maintain the terseness
// (2) always have access to values of Car and Driver enums
case (Mustang, Bob) => false
case (Camaro, Mike) => false
case _ => true
}
但是,如何丰富arg to Config.collect,以便在创建匿名分部函数时,我可以访问AllenumValue中的所有内容,而无需隐式导入语句enum Car{Mustang,Camaro,Challenger}是无效的Scala语法;您使用的是scala.Enumeration吗?即使隐式也永远不会完全不可见,这将导致无法理解的代码。只需导入Car。\在您需要的范围内,或者声明Config扩展AllenumValue,您将无法避免将它们导入到某个地方。导入的可伸缩性不好。想象一下,我想提供的不仅仅是两个枚举——可能是函数,也可能是5个枚举。无论如何,我对解决继承或组合问题的可能方法感兴趣,而不是导入。我不认为有额外的导入是一个问题——你说的不可伸缩性是什么意思——实际上,你打算多久更新一次这段代码?类似collect的方法会在代码库中大量使用
trait AllEnumValues {
val (Mustang, Camaro, Challenger) = (Car.Mustang, Car.Camaro, Challenger)
val (Bob, John, Mike) = (Driver.Bob, Driver.John, Driver.Mike)
}