解码下面的Scala代码
在阅读有关Scala的书时,我偶然发现了以下代码。我无法将代码分离为函数、参数和变量解码下面的Scala代码,scala,scala-collections,Scala,Scala Collections,在阅读有关Scala的书时,我偶然发现了以下代码。我无法将代码分离为函数、参数和变量 val feeds = Map("Andy Hunt" -> "blog.toolshed.com", "Dave Thomas" -> "pragdave.me", "NFJS" -> "nofluffjuststuff.com/blog") val fiterName = feeds fil
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")
}
有人能一步一步地给我解释一下代码吗?
feeds
是一个Map[String,String]
将一个人映射到博客
然后,使用过滤器
迭代该映射,该过滤器尝试过滤以大写字母D
开头且其值包含单词“pragprog”的任何作者
在映射上筛选时,将得到一个元组,其中键作为第一个元素,值作为第二个元素。使用圆括号,它看起来像这样:
val filterName = feeds.filter(element => {
val (key, value) = element
key.startsWith("D") && value.contains("pragprog")
})
请注意,过滤器本身是一个函数,它接受另一个函数作为输入。此函数接受类型为A
的参数,在本例中,该参数是一个元组(String,String)
,并生成一个布尔值,指示元素是否与条件匹配。在过滤器内部,他们使用元组解构:
val (key, value) = element
它接受一个Tuple2[String,String]
并调用它的方法,允许您按名称访问元组的组件,而不是通过.1
和.2
我理解查看代码,但我想知道的是什么?根据规范,过滤器采用谓词(String,String)=>Boolean。记住这一点,val(键,值)=元素意味着什么?然后调用布尔表达式(键startsWith“D”)&&(值包含“pragprog”)的值是多少?@Gurupraveen更新了答案以反映您的问题。还有一个问题,如果我不想使用元组解构怎么办?如何获得相同的结果?@Gurupraveenelement.\u 1.用(“D”)启动&element.\u 2.包含(“pragprog”)