Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解码下面的Scala代码_Scala_Scala Collections - Fatal编程技术网

解码下面的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

在阅读有关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")   
}

有人能一步一步地给我解释一下代码吗?

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更新了答案以反映您的问题。还有一个问题,如果我不想使用元组解构怎么办?如何获得相同的结果?@Gurupraveen
element.\u 1.用(“D”)启动&element.\u 2.包含(“pragprog”)