解码以下 Scala 代码
Decoding the below Scala code
在阅读一本关于 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]
将一个人映射到博客。
然后该映射使用 filter
进行迭代,它会尝试过滤任何以大写字母 D
开头且其值包含单词 "pragprog".[=25 的作者=]
当您在 Map
上 filter
时,您会得到一个元组,该元组的第一个元素是键,第二个元素是值。使用圆括号,它看起来像这样:
val filterName = feeds.filter(element => {
val (key, value) = element
key.startsWith("D") && value.contains("pragprog")
})
请注意,过滤器本身就是一个 higher order function,它需要另一个函数作为输入。这个函数接受一个 A
类型的参数,在我们的例子中是一个元组 (String, String)
,并产生一个布尔值,指示元素是否匹配条件。在过滤器内部,他们使用了元组解构:
val (key, value) = element
它接受 Tuple2[String, String]
并调用它的 unapply
方法,允许您通过名称访问元组的组件,而不是通过 ._1
和 _.2
在阅读一本关于 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]
将一个人映射到博客。
然后该映射使用 filter
进行迭代,它会尝试过滤任何以大写字母 D
开头且其值包含单词 "pragprog".[=25 的作者=]
当您在 Map
上 filter
时,您会得到一个元组,该元组的第一个元素是键,第二个元素是值。使用圆括号,它看起来像这样:
val filterName = feeds.filter(element => {
val (key, value) = element
key.startsWith("D") && value.contains("pragprog")
})
请注意,过滤器本身就是一个 higher order function,它需要另一个函数作为输入。这个函数接受一个 A
类型的参数,在我们的例子中是一个元组 (String, String)
,并产生一个布尔值,指示元素是否匹配条件。在过滤器内部,他们使用了元组解构:
val (key, value) = element
它接受 Tuple2[String, String]
并调用它的 unapply
方法,允许您通过名称访问元组的组件,而不是通过 ._1
和 _.2