Ale*_*ise 31
这是一个提取器,可以为您从URL中获取一些部分:
object UrlyBurd {
def unapply(in: java.net.URL) = Some((
in.getProtocol,
in.getHost,
in.getPort,
in.getPath
))
}
val u = new java.net.URL("http://www.google.com/")
u match {
case UrlyBurd(protocol, host, port, path) =>
protocol +
"://" + host +
(if (port == -1) "" else ":" + port) +
path
}
Run Code Online (Sandbox Code Playgroud)
例如:
val URL = """(http|ftp)://(.*)\.([a-z]+)""".r
def splitURL(url : String) = url match {
case URL(protocol, domain, tld) => println((protocol, domain, tld))
}
splitURL("http://www.google.com") // prints (http,www.google,com)
Run Code Online (Sandbox Code Playgroud)
一些解释:
.r字符串上的方法(实际上,在StringLikes上)将它们变成了一个实例Regex.Regexes定义一个unapplySeq方法,允许它们在模式匹配中用作提取器(请注意,您必须为它们指定一个以大写字母开头的名称才能使其工作).(...)正则表达式中的组定义.| 归档时间: |
|
| 查看次数: |
12638 次 |
| 最近记录: |