使用Arity-1调用方法在scala中是如何工作的?
我是Scala和Spark的新手。我写了下面的程序,效果很好。然而,我不明白它是如何工作的。任何帮助都将不胜感激使用Arity-1调用方法在scala中是如何工作的?,scala,apache-spark,Scala,Apache Spark,我是Scala和Spark的新手。我写了下面的程序,效果很好。然而,我不明白它是如何工作的。任何帮助都将不胜感激 object MyFirstSparkProgram extends App { def filterString(string : String) : Boolean = { string.contains("Python") || string.contains("Spark") } val sc = new SparkContext(conf) va
object MyFirstSparkProgram extends App {
def filterString(string : String) : Boolean = {
string.contains("Python") || string.contains("Spark")
}
val sc = new SparkContext(conf)
val rdd = sc.textFile("README.md").filter(s => filterString(s))
// I understand this
val rdd1 = sc.textFile("README.md").filter(filterString(_))
// I understand this
val rdd2 = sc.textFile("README.md").filter(filterString)
// I know this works, but do not understand how does it work.
// The filterString method is defined with an argument(String),
// how its called successfully without an argument?
}
我对Scala的理解是,如果一个方法没有参数,那么可以在没有括号的情况下调用它。(),但是我的方法
filterString
有一个参数。没有括号怎么叫它?上面的链接有一个Arity-1的示例,但是对我没有帮助。2和第3个示例基本上是相同的,它只是Function1[String,Boolean]
(=>是一个糖)
您不是在调用函数,而是在传递对它的引用。2和第三个示例基本上是相同的,它只是
Function1[String,Boolean]
(=>是一个糖)
您不是在调用函数,而是在传递对它的引用。2和第三个示例基本上是相同的,它只是
Function1[String,Boolean]
(=>是一个糖)
您不是在调用函数,而是在传递对它的引用。2和第三个示例基本上是相同的,它只是
Function1[String,Boolean]
(=>是一个糖)
如果您使用需要显式参数的方法的方法名,并且没有提供足够的参数列表(即零而不是一),并且在需要函数值的地方使用该裸名称,则您没有调用函数,而是传递对该函数的引用,编译器将这些表达式转换为适当类型的函数值:
scala> def f(i:Int) = 5
f: (i: Int)Int
scala> List(6).map(f)
res1: List[Int] = List(5)
scala> (f(_)) andThen f
res9: Int => Int = <function1>
scala> val x: Int=>Int = f
x: Int => Int = <function1>
此设计决策允许您在有意义的地方将方法视为函数。如果您使用需要显式参数的方法的方法名称,并且没有提供足够的参数列表(即零而不是一),并且在需要函数值的地方使用该裸名称,编译器将这些表达式转换为适当类型的函数值:
scala> def f(i:Int) = 5
f: (i: Int)Int
scala> List(6).map(f)
res1: List[Int] = List(5)
scala> (f(_)) andThen f
res9: Int => Int = <function1>
scala> val x: Int=>Int = f
x: Int => Int = <function1>
此设计决策允许您在有意义的地方将方法视为函数。如果您使用需要显式参数的方法的方法名称,并且没有提供足够的参数列表(即零而不是一),并且在需要函数值的地方使用该裸名称,编译器将这些表达式转换为适当类型的函数值:
scala> def f(i:Int) = 5
f: (i: Int)Int
scala> List(6).map(f)
res1: List[Int] = List(5)
scala> (f(_)) andThen f
res9: Int => Int = <function1>
scala> val x: Int=>Int = f
x: Int => Int = <function1>
此设计决策允许您在有意义的地方将方法视为函数。如果您使用需要显式参数的方法的方法名称,并且没有提供足够的参数列表(即零而不是一),并且在需要函数值的地方使用该裸名称,编译器将这些表达式转换为适当类型的函数值:
scala> def f(i:Int) = 5
f: (i: Int)Int
scala> List(6).map(f)
res1: List[Int] = List(5)
scala> (f(_)) andThen f
res9: Int => Int = <function1>
scala> val x: Int=>Int = f
x: Int => Int = <function1>
此设计决策允许您将方法视为有意义的函数。它不是调用。它不是调用。它不是调用。它不是调用。它不是调用。它不是调用。