Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 是否可以“自动”或隐式地丰富匿名函数?_Scala - Fatal编程技术网

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)
}