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