文档章节

Scala函数调用省略点号和括号

秋风醉了
 秋风醉了
发布于 2015/04/29 19:19
字数 476
阅读 259
收藏 0
点赞 0
评论 0

Scala函数调用省略点号和括号


省略括号

如果一个方法不用接受参数,你可以无需括号就定义它。调用者也必须不加括号地调用它。如果你加上了空括号,那么调用者可以有选择地加或者不加括号。例如,List 的size 方法没有括号,所以你必须写List(1,2,3).size。如果你尝试写List(1,2,3).size() 就会得到一个错误。如下代码,

println(List(1, 2, 3).size)
println(List(1, 2, 3).size())

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft\traversing_mapping_so_on.scala:154: error: Int does not take parameters

println(List(1, 2, 3).size())

                          ^

one error found

然而,String 类的length方法在定义时带有括号,所以,"hello".length() 和"hello".length 都可以通过编译。

Scala 社区的约定是,在没有副作用的前提下,省略调用方法时候的空括号。所以,查询一个序列的大小(size)的时候可以不用括号,但是定义一个方法来转换序列的元素则应该写上括号。


省略点号

如下示例,size 方法是List中得到 List 大小的函数,调用时 可以省略点号

scala> List(1,2,3) size
warning: there was one feature warning; re-run with -feature for details
res4: Int = 3

在scala的脚本文件中这样写,

println("hello world" substring(0, 3))

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala traversing_mapping_so_on.scala

hel

甚至这样写都可以,

println("hello world" substring(0, 3) toUpperCase() indexOf "h")


函数调用使用 {} 代替 ()

当函数 只接收一个参数时,就可以使用花括号 代替 圆括号。如下,

// 定义一个柯里化的函数
def sum(i: Int)(j: (Int) => Int) = j(i)
val res99 = sum(1) { i => i + 10 }
println(res99) // 11


def p(x: Int): Unit = {
  println(x)
}

p {
  2
}

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala traversing_mapping_so_on.scala

11

2

===========END===========

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 223
博文 581
码字总数 411013
作品 0
东城
程序员
关于scala搞出的新概念的语法糖

对于scala搞那么多语法糖和新概念真是又爱又恨。爱的是scala引入了java一直没有的lambda特性,这对于使用高阶函数抽象来处理集合数据非常有爱(spark简洁的RDD处理得益于此)。恨的是scala搞...

中成才 ⋅ 2015/11/15 ⋅ 0

【Spark亚太研究院系列丛书】Spark实战高手之路-第2章动手实战Scala第1小节(2)

2,Scala函数特性编程实战 当函数不带参数的使用,我们调用的时候可以省略括号: 接下来定义一个匿名函数、调用并运行: 在Scala总函数式一等公民 ,所以我们可以把函数付给一个常: 另外一个...

Spark亚太研究院 ⋅ 2014/11/24 ⋅ 0

scala入门-02基础知识->方法

首先在src下的main下的scala下创建一个包为org.scala.base 创建一个scala类名称为HelloWorld.scla 由于main方法要位于object对象中,所以我们创建一个object 名称为HelloWorld 并增加main方法...

stark_summer ⋅ 2015/01/09 ⋅ 0

Scala指令式与函数式编程

用类似于Java,C++的指令式编程方法实现将运行参数分行显示的程序代码如下。 var i = 0;while (i < args.length) {if (i != 0) {print(" ");}print(args(i));i += 1;}println(); 上面的代码需...

开源中国驻成都办事处 ⋅ 2012/05/25 ⋅ 0

Methods with empty argument lists

Methods with empty argument lists scala在没有参数的方法调用上是非常灵活的。 如果一个方法没有参数,你可以不用括号来定义这个方法,调用的时候一定不加括号。 相反的,如果你在定义无参...

秋风醉了 ⋅ 2015/12/20 ⋅ 0

控制抽象之传名参数

我们来看这个例子: package scala object ScalaTest3 { def main(args : Array[String]) : Unit = { runInThread(()=>println("Hi")) Thread.sleep(5000) println("Bye") } def runInThread......

柳哥 ⋅ 2014/06/16 ⋅ 1

[转]Scala的本质

Scala 是一种基于JVM,集合了面向对象编程和函数式编程优点的高级程序设计语言。在《Scala编程指南 更少的字更多的事》中我们从几个方面见识了Scala 简洁,可伸缩,高效的语法。我们也描述了...

mj4738 ⋅ 2011/11/01 ⋅ 10

函数和闭包之偏应用函数

偏应用函数(Partial Applied Function)的定义:偏应用函数就是缺少部分或全部参数的函数。 尽管前面的例子里下划线(_)替代的只是单个参数,但你还可以使用单个下划线替换整个参数列表。再...

柳哥 ⋅ 2014/06/08 ⋅ 0

Scala学习(四)

抽象类定义:abstract class Element{ def contents:Array[String]; def height = contents.length} 定义无参数方法:如果仅提供对象的某个数据的访问(没有副作用的方法),那么久省略括号。...

如风达 ⋅ 2015/10/13 ⋅ 0

Scala 中不带括号的函数与带括号函数的差别

在Scala中, 定义一个不带任何参数函数可以这样写: def name = "Archer" 调用不带括号的函数时不能带括号. 比如调用刚才定义的函数name,只能写name, 不能写name(), 除非函数name定义时加上括...

mj4738 ⋅ 2012/02/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部