在阅读有关Scala的书时,我偶然发现了以下代码。我无法将代码分离为函数,参数和变量。
val feeds = Map("Andy Hunt" -> "blog.toolshed.com",
"Dave Thomas" -> "pragdave.me",
"NFJS" -> "nofluffjuststuff.com/blog")
val fiterName = feeds filter { element =>
val (key, value) = element
(key startsWith "D") && (value contains "pragprog")
}
有人可以一步一步地解释我的代码吗?
答案 0 :(得分:6)
feeds
是Map[String, String]
,可将某人映射到博客。
然后该地图使用filter
进行迭代,该D
会尝试过滤以大写字母filter
开头的任何作者,并且其值包含单词“pragprog”。
当您Map
上的val filterName = feeds.filter(element => {
val (key, value) = element
key.startsWith("D") && value.contains("pragprog")
})
时,您会得到一个元组,其中键为第一个元素,值为第二个元素。使用圆括号,它看起来像这样:
A
请注意,过滤器本身是higher order function,它需要另一个函数作为输入。此函数采用类型(String, String)
的参数,在我们的示例中是一个元组val (key, value) = element
,并生成一个布尔值,指示元素是否与条件匹配。在过滤器内部,他们使用元组解构:
Tuple2[String, String]
这需要unapply
并调用它的._1
方法,允许您按名称访问元组的组件,而不是通过_.2
和class MenuItem implements Serializable<MenuItem>{
name: string;
link: string;
styles: string;
children: MenuItem[];
}