Scala学习之相同的函数名

Posted Python爬虫与算法进阶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala学习之相同的函数名相关的知识,希望对你有一定的参考价值。

最近在慢慢的开始用Scala写Spark,刚开始也是在菜鸟教程上简单过了一遍Scala,现在还记得一些基本语法,还有各种奇怪的语法糖。想要更快的学习这门语言,还是需要自己多谢谢。

今天在看别人代码时,发现他在类中定义了两个名字一模一样的函数,但是我还以为他写错了。当我以Python的思维去看待这们语言时,当然是在作死的边缘了。

举一个简单的栗子,从MongoDB读取数据时使用的配置所定义的两个函数

def readConfig(context: SparkContext, database: String, collection: String): ReadConfig = {
    ReadConfig(Map("database" -> database, "collection" -> collection),
      Some(ReadConfig(context)))
  }

  def readConfig(session: SparkSession, database: String, collection: String): ReadConfig = {
    ReadConfig(Map("database" -> database, "collection" -> collection),
      Some(ReadConfig(session)))
  }


可以看到两个函数名一样的,刚开始我也很懵逼,但是仔细一看,他的参数是不一样的,一个是context: SparkContext,一个是session: SparkSession。这两个函数的功能一样,但是接受的参数不一样,所以这才需要去定义两个函数。(试想一下,在Python中如何去实现)

可能你不懂Scala,让我简单跟你讲一下。首先我们使用def关键字定义了一个名为readConfig的函数,和Python一模一样;然后就是函数接受的参数了,可以看到在每个参数后面有冒号,这个冒号就表示前面的数据类型,比如定义一个相加函数

object add{
   def addInt(a:Int, b:Int) : Int = {
      var sum:Int = 0
      sum = a + b
      return sum
   }}


Scala会在变量后定义类型,这样就可以区别不同的函数了。

回到上面的栗子,一个类型是SparkContext,一个是SparkSession,这是Spark的数据类型;然后我们可以看到在函数末尾是冒号加ReadConfig,这里说的返回的数据类型是ReadConfig,也就是从MongoDB读取数据时使用的配置类型。(如果是Unit则不用返回任何数据,和Java类似)

是不是很好理解,在调用函数时,只要我们传递的第一个参数是不同类型,就会使用相应的函数。

都说Scala是一种函数式语言,函数是 Scala 语言的核心,看看Scala函数的特性,不说了,继续撸Scala了。

以上是关于Scala学习之相同的函数名的主要内容,如果未能解决你的问题,请参考以下文章

Scala 学习之 aggregate函数

大数据学习之Scala语言的高级特性42

Scala深入学习之函数学习

Scala学习之函数式风格编程

python学习之函数阶段

大数据学习之Scala语言基本语法学习36