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了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值