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

原文发布于微信公众号 - Python爬虫与算法进阶(zhangslob)

原文发表时间:2018-11-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

Swift 中的内存管理详解

这篇文章是在阅读《The Swift Programming Language》Automatic Reference Counting(ARC,自动引用计数)...

12710
来自专栏ImportSource

厕读:每日一题,面试无忧

4. 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C...

29360
来自专栏用户2442861的专栏

java final 关键字

http://blog.csdn.net/niguang09/article/details/6035813

10120
来自专栏烂笔头

Python魔术方法-Magic Method

目录[-] 介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,例如类的初始化方法 __init__ ,Pyt...

35960
来自专栏云瓣

读书笔记-你不知道的JavaScript(上)

本文首发在我的个人博客:http://muyunyun.cn/ 《你不知道的JavaScript》系列丛书给出了很多颠覆以往对JavaScript认知的点...

416100
来自专栏java一日一条

Java 中 Varargs 机制的理解

J2SE 1.5提供了“Varargs”机制。借助这一机制,可以定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。本文介绍这一机...

12830
来自专栏Android开发指南

6:异常处理

30180
来自专栏增长技术

swift体验1

一门新语言传统的入门方式是在屏幕上打印“Hello,wrold”。在Swift中你可以用下面一行 代码:

11240
来自专栏偏前端工程师的驿站

一起Polyfill系列:Function.prototype.bind的四个阶段

昨天边参考es5-shim边自己实现Function.prototype.bind,发现有不少以前忽视了的地方,这里就作为一个小总结吧。 一、Function....

18860
来自专栏决胜机器学习

PHP数据结构(二十) ——其他插入排序

PHP数据结构(二十)——其他插入排序 (原创内容,转载请注明来源,谢谢) 注:本文是衔接直接插入排序的,因此直接插入排序的相关内容请点击——PHP...

36770

扫码关注云+社区

领取腾讯云代金券