Scala学习之特殊符号,及函数
http://www.runoob.com/scala/scala-functions.html scala函数的定义,注意一些特殊函数的书写
1. =>符号
var equalRight = (x:Int) => x + 1 //--equalRight is <function1> 匿名函数
类似于转化符号,=>指明这个函数把左边的东西(任何整数x)转变成右边的东西(x + 1)。所以,这是一个把任何整数x映射为x + 1的函数。也可以进行类型的强转.
---该解释尚不清晰,需要进一步发现。
2.<- 循环遍历(递归)+参数的可变性×
def printStrings(args: String*) = {
var i: Int = 0
for (arg <- args) {
println("Arg value[" + i + "] = " + arg)
i = i + 1
}
}
函数调用:
printStrings("ahoBs", "abo", "alBo")
结果:
Arg value[0] = ahoBs
Arg value[1] = abo
Arg value[2] = alBo
3.字符串拼接 ++=
/**
* String 对象是不可变的,如果你需要创建一个可以修改的字符串,可以使用 String Builder 类
*/
def StringTest(): Unit ={
val hello:String = "hello world!" //String 对象不可变
var len = hello.length
val buf = new StringBuilder
buf += 'a'
buf ++= "bcdef" //++=
println("hello say :" + hello)
println("hello's len is "+ len)
println("buf is " + buf.toString())
}
函数:
1.高阶函数 http://www.runoob.com/scala/higher-order-functions.html
高阶函数(Higher-Order Function)就是操作其他函数的函数。
Scala 中允许使用高阶函数, 高阶函数可以使用其他函数作为参数,或者使用函数作为输出结果。
以下实例中,apply() 函数使用了另外一个函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v:
// 函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v
def apply(f:Int => String,v:Int) = f(v)
def layout[A](x:A) = "[" + x.toString() + "]"
函数调用:
println( apply( layout, 10) )
结果:
[10]
2.匿名函数 http://www.runoob.com/scala/anonymous-functions.html
Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体。
使用匿名函数后,我们的代码变得更简洁了。
下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数:
var inc = (x:Int) => x+1
上述定义的匿名函数,其实是下面这种写法的简写:
def add2 = new Function1[Int,Int]{
def apply(x:Int):Int = x+1;
}
以上实例的 inc 现在可作为一个函数,使用方式如下:
var x = inc(7)-1
同样我们可以在匿名函数中定义多个参数:
var mul = (x: Int, y: Int) => x*y
mul 现在可作为一个函数,使用方式如下:
println(mul(3, 4))
我们也可以不给匿名函数设置参数,如下所示:
var userDir = () => { System.getProperty("user.dir") }
userDir 现在可作为一个函数,使用方式如下:
println( userDir() )
实例
object Demo {
def main(args: Array[String]) {
println( "multiplier(1) value = " + multiplier(1) )
println( "multiplier(2) value = " + multiplier(2) )
}
var factor = 3
val multiplier = (i:Int) => i * factor
}
将以上代码保持到 Demo.scala 文件中,执行以下命令:
$ scalac Demo.scala
$ scala Demo
输出结果为:
multiplier(1) value = 3
multiplier(2) value = 6
3.函数柯里化(Currying) http://www.runoob.com/scala/currying-functions.html
柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。.
实例
首先我们定义一个函数:
def add(x:Int,y:Int)=x+y
那么我们应用的时候,应该是这样用:add(1,2)
现在我们把这个函数变一下形:
def add(x:Int)(y:Int) = x + y
那么我们应用的时候,应该是这样用:add(1)(2),最后结果都一样是3,这种方式(过程)就叫柯里化。
实现过程
add(1)(2) 实际上是依次调用两个普通函数(非柯里化函数),第一次调用使用一个参数 x,返回一个函数类型的值,第二次使用参数y调用这个函数类型的值。
实质上最先演变成这样一个方法:
def add(x:Int)=(y:Int)=>x+y
那么这个函数是什么意思呢? 接收一个x为参数,返回一个匿名函数,该匿名函数的定义是:接收一个Int型参数y,函数体为x+y。现在我们来对这个方法进行调用。
val result = add(1)
返回一个result,那result的值应该是一个匿名函数:(y:Int)=>1+y
所以为了得到结果,我们继续调用result。
val sum = result(2)
最后打印出来的结果就是3。
完整实例
下面是一个完整实例:
object Test {
def main(args: Array[String]) {
val str1:String = "Hello, "
val str2:String = "Scala!"
println( "str1 + str2 = " + strcat(str1)(str2) )
}
def strcat(s1: String)(s2: String) = {
s1 + s2
}
}
执行以上代码,输出结果为:
$ scalac Test.scala
$ scala Test
str1 + str2 = Hello, Scala!
---------------------
作者:AhoBric
来源:CSDN
原文:https://blog.csdn.net/qq_31215163/article/details/54910515
版权声明:本文为博主原创文章,转载请附上博文链接!
Scala学习之特殊符号,及函数相关推荐
- Scala学习:Curry化的函数
2019独角兽企业重金招聘Python工程师标准>>> 在第1章,我们说过Scala允许你创建新的"感觉像是原生语言支持"的控制抽象.尽管到目前你已经看到的例子都 ...
- Scala学习(二)--- 控制结构和函数
控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句 ...
- php相关术语,PHP中一些专业术语、符号、函数[初学者学习PHP]
此篇文章为个人学习PHP过程中,逐步整理的php常见的一些术语.符号.函数,以后回顾进行温习,同时,可把此分享给一些php初学者学习,会不断添加.更新,可能有点乱,可通过搜索进行查找: 1.dirna ...
- scala学习之scala中一些集合的常用函数
scala学习 集合常用函数 集合的基本属性与常用操作 长度.大小.循环遍历.迭代器.生成字符串.是否有包含等 object TestSetFunction {def main(args: Array ...
- Scala学习--《Scala编程》
2019独角兽企业重金招聘Python工程师标准>>> Scala学习手册--可伸缩的语言(随着使用者的需求而成长) 第一章:基本概念 Scala=FP+OO.静态语言 兼容性.简 ...
- Kotlin学习(七):函数
Kotlin学习(七):函数 函数基本用法 Kotlin 函数必须用 fun 关键字开头,后面紧跟着函数名,以及一对小括号,小括号中是函数参数列表,如果函数有返回值,在小括号后面加冒号 (:),冒号后 ...
- Scala学习笔记(一)
Scala学习笔记(一) 一.Scala简介 二.Scala安装与配置 1. 安装JDK 2. 安装Scala SDK 3. 安装IDEA插件 三.Scala解释器 1. 启动Scala解释器 2. ...
- Scala学习笔记-方便查找使用 为Spark学习打基础
Scala学习 注意 伊始 为什么是Scala 网课 环境 电脑环境安装 关于版本的声明 我的环境和版本 IDEA插件安装 IDEA关联Scala源码 基础部分1 文档注释和生成 字符串的三种输出 变 ...
- Scala学习笔记-详细记录学习中遇到的知识点
目录 输入 print输出 变量 数据类型 标识符与关键字 运算符优先级 if else for循环 yield生成器 break与continue 函数 局部函数 惰性lazy 异常 类与对象 构造 ...
最新文章
- 使用Nmap获取目标服务器开放的服务以及操作系统信息
- Log4j的FileAppender配置
- 升级Mountain Lion后git等工具不能用的问题的解决方法
- 优酷视频如何修改账号密码?
- 准确估计透明物体的 3D 姿态:机器人收集 + Keypose 算法
- 冰城环保进入智慧时代
- Matter-JS Composite.add 符合材料添加约束
- 【多目标优化求解】基于matlab自适应风驱动算法求解多目标优化问题【含Matlab源码 1414期】
- Win10中卸载IE11
- 计算机跳过密码直接登录密码,win10免密码自动登录怎么设置_win10跳过密码直接登录电脑-win7之家...
- 基于51单片机的电子称称重压力检测阈值报警系统方案原理图设计
- 也许是全网最全的 Angular 新手入门指南
- three.js 入门指南(敷衍一下)
- lempel ziv matlab,1.9 Lempel-Ziv算法
- Atypical Games推出《辐射岛》和《辐射之城》的后续游戏
- Axure中继器的高级功能
- mac apache 重启
- centos7的LAMP多机LAP+MYSQL
- android jni (jni_onload方式)
- CTF之Bugku 游戏过关
热门文章
- (*长期更新)软考网络工程师学习笔记——Section 11 Linux操作系统简介
- python mongodb查询_Python MongoDB 查找
- Win7 路由上网DNS服务器ping不通的解决方法
- 济南计算机机械工程学校,济南电子机械工程学校
- 华为平板wps语音朗读_华为平板M6 10.8英寸综合评测 目前体验最好的安卓平板
- java mvc mvp mvvm_一篇文章了解架构模式:MVC/MVP/MVVM
- python计算器基础知识_Python基础(一):将Python当做计算器、编程的第一步
- nc 发布元数据_海南接线端子数控NC尼龙加工现货_苏州九兴电子
- android 系统亮度,android 设置系统屏幕亮度
- linux比较两个文件md5,linux下如何批量比对两个文件的MD5值是否一致,SHA1是否一致。...