Scala中的方法参数

时间:2012-02-24 20:48:44

标签: scala

我开始使用Scala,我不明白s =>部分是什么/做什么。有人可以解释一下吗?

thrill.remove(s => s.length == 4)

4 个答案:

答案 0 :(得分:3)

这是一种指定功能的方法。函数是将一个或多个参数作为输入并返回输出的东西。您可以使用=>指定函数的方法之一符号。

s: String => s.length == 4 // a function that takes a String called s as input
                           // and returns a Boolean (true if the length of s is 4
                           // false otherwise)

在scala中,您可以使用类似于使用整数或字符串或任何其他类型的基本数据类型的函数。

您可以将它们分配给变量:

scala> val f = (s: String) => s.length==4 // assigning our function to f
f: String => Boolean = <function1>

scala> f("abcd") // ...and using it
res1: Boolean = true

您可以将它们作为参数传递给其他函数或方法:

scala> val thrill = List("foo", "bar", "baz", "bazz")
thrill: List[java.lang.String] = List(foo, bar, baz, bazz)

scala> thrill.remove(s => s.length == 4)
warning: there were 1 deprecation warnings; re-run with -deprecation for detail

res2: List[java.lang.String] = List(foo, bar, baz)

这里你要说的是删除方法:“将此函数s =&gt; s.length == 4应用于列表中的每个元素,并删除该函数返回true的所有元素”

顺便说一下,请注意不推荐删除。建议的替代方法是filterNot

scala> thrill.filterNot(s => s.length == 4)
res3: List[java.lang.String] = List(foo, bar, baz)

答案 1 :(得分:2)

表达式

s => s.length == 4

表示一个函数,它接受一个字符串(我猜)并根据它是否有四个长度返回一个布尔值

val f = s => s.length == 4
println(f("five")) //prints "true"
println(f("six")) //prints "false"

s =>部分只声明函数的参数名称(在这种情况下,只有一个:s

答案 2 :(得分:1)

这表示“在thrill中的所有项目上运行函数s => s.length == 4,并删除函数返回true的任何位置。”从逻辑上讲,该函数必须将thrill中包含的类型的单个项作为参数,并且必须返回布尔值(true或false)。

scala语法s =&gt; ...表示一个lambda函数 - 一种简写函数,在很多情况下,函数的参数和返回类型都是推断出来的。例如,在这种情况下,编译器足够聪明,知道如果thrill包含字符串,则s必须是字符串。同样,它可以以静态类型的方式确认返回值(s.length == 4)是布尔值,并满足布尔返回值的要求。

简而言之:将其视为定义为boolean f(String s) { return s.length == 4; }

的函数

答案 3 :(得分:1)

我相信以下所有内容都是相同的(虽然我也是Scala newb,随时提供更正)

thrill.remove((s:String) => s.length == 4)
thrill.remove(s => s.length == 4)
thrill.remove(_.length == 4)