使用Arity-1调用方法在scala中是如何工作的?

使用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

我是Scala和Spark的新手。我写了下面的程序,效果很好。然而,我不明白它是如何工作的。任何帮助都将不胜感激

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>

此设计决策允许您将方法视为有意义的函数。

它不是调用。它不是调用。它不是调用。它不是调用。它不是调用。它不是调用。