前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala学习之相同的函数名

Scala学习之相同的函数名

作者头像
小歪
发布2018-12-07 18:05:52
6890
发布2018-12-07 18:05:52
举报
文章被收录于专栏:Python爬虫与算法进阶

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

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

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

代码语言:javascript
复制
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一模一样;然后就是函数接受的参数了,可以看到在每个参数后面有冒号,这个冒号就表示前面的数据类型,比如定义一个相加函数

代码语言:javascript
复制
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了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与算法进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档