是否可以在case语句的主体中(或者在使用提取器的任何其他地方)使用参数自定义提取器?

Dan*_*ock 14 scala unapply extractor

基本上,我希望能够构建一个自定义提取器,而无需在使用它之前将其存储在变量中.

这不是我将如何使用它的一个真实示例,它更可能用于正则表达式或其他字符串模式(如构造),但希望它能解释我正在寻找的内容:

def someExtractorBuilder(arg:Boolean) = new {
  def unapply(s:String):Option[String] = if(arg) Some(s) else None
}

//I would like to be able to use something like this 
val {someExtractorBuilder(true)}(result) = "test"
"test" match {case {someExtractorBuilder(true)}(result) => result }

//instead I would have to do this:
val customExtractor = someExtractorBuilder(true)
val customExtractor(result) = "test"
"test" match {case customExtractor(result) => result}
Run Code Online (Sandbox Code Playgroud)

当只做一个自定义提取器时,它没有太大的区别,但如果你为case语句构建一个大的提取器列表,它可能会通过将所有提取器与它们的使用分开来使事情变得更难.

我希望答案是不,你不能这样做,但我想我先问一下:D

Adr*_*ors 8

参数化提取器很酷,但我们现在没有资源来实现它们.


ret*_*nym 4

没有。

\n\n

8.1.7 提取器模式

\n\n
\n

提取器模式 x (p 1 , . . . ,\npn ) 其中 n \xe2\x89\xa5 0 与构造函数模式具有相同\n 语法形式。但是,稳定的 identi\xef\xac\x81er x 不是 case\n 类,而是表示一个对象,该对象具有一个名为 unapply 或 unapplySeq 的成员方法,\n 与该模式匹配。

\n
\n