scala 基础 —— 函数(柯里化)
与 Java/c++ 不同的是,scala 并未提供 ++ 和 – 操作符;
不带参数的 scala 方法通常不使用圆括号;
scala> "hello".distinct String = helo
0. 函数定义
使用 def 关键字:
def square(x: Int) = x*x
作为值的函数:
val square: Int => Int = x => x*x
1. 基本认识
运算符重载:
a+b 其实是 a.+(b),之所以能识别
.+
,显然内部实现了运算符重载;通常来说,可以用
a 方法 b
来简写a.方法(b)
,省去了点,也省去了小括号。scala> 1.to(10) scala.collection.immutable.Range.Inclusive = Range 1 to 10 scala> 1 to 10 scala.collection.immutable.Range.Inclusive = Range 1 to 10
apply
- 使用“类名()”的形式,其实就是“类名.apply()”的一种缩写,以这种方式来构造对象,而不是使用“new 类名()”的方式
- Array(1, 2, 3, 4)
- “hello World”(6),在 StringOps 类中有 def apply(n: Int): Char 的函数定义,“Hello World”(6) 其实是 “Hello World”.apply(6) 的缩写,也即提取其第六个字符;
- 使用“类名()”的形式,其实就是“类名.apply()”的一种缩写,以这种方式来构造对象,而不是使用“new 类名()”的方式
2. 柯里化特性
通过固定其余的参数,将多个参数的函数退化为一个参数:
> def multiply(x: Int)(y: Int) = x*y > multiply(3)(4) 12 > val multiply3 = multiply(3) _ > multiply3(4) 12
方式之二,通过 implicit 关键字:
> def add(x: Int, y: Int) = x+y > add(4, 5) 9 > def add5(x: Int)(implicit y: Int=5) = x+y > add5(4) 9 >> add5(4)(5) 9
也可事先声明 implicit 型变量:
> implicit val x = 100 > add5(3) 103
定义方式之三:
> def sub(x: Int) = (y: Int) => x - y > sub(2, 3) -1 > val sub2 = sub(2) > sub2(3) -1
scala 基础 —— 函数(柯里化)相关推荐
- scala 环境搭建 变量 值 数据类型 元组 表达式块 语句 函数 柯里化 集合 面向对象 隐式转换
scala (scalable的简写) scala是一个比较冷门的语言,不太被人们所知道 为什么这么冷门的语言现在被我们使用 很多的大数据的项目的源码是是用scala语言编写的. 因为大数据技术不断被 ...
- 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...
- 打造属于自己的underscore系列(五)- 偏函数和函数柯里化
这一节的内容,主要针对javascript函数式编程的两个重要概念,偏函数(partial application) 和函数柯里化(curry)进行介绍.着重讲解underscore中对于偏函数应用的 ...
- 高级函数技巧-函数柯里化
我们经常说在Javascript语言中,函数是"一等公民",它们本质上是十分简单和过程化的.可以利用函数,进行一些简单的数据处理,return 结果,或者有一些额外的功能,需要通过 ...
- JS - 函数柯里化
一.概念 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数. 简单来说,柯里化是一种函数的转换,它是指将一个函数从可调用的 ...
- 实现一个通用的函数柯里化的函数
本文目的 这篇文章会一步一步带你实现一个通用的函数柯里化的函数,即使你完全不懂柯里化这个概念也没关系,我会先介绍柯里化函数的概念,然后以实现一个完整的判断变量类型的函数的例子来让你直观体验函数柯里化, ...
- 函数柯里化的意义_详解JS函数柯里化
第一次看到柯里化这个词的时候,还是在看一篇算法相关的博客提到把函数柯里化,那时一看这个词就感觉很高端,实际上当你了解了后才发现其实就是高阶函数的一个特殊用法. 果然是不管作用怎么样都要有个高端的名字才 ...
- reactjs高阶函数和函数柯里化
高阶函数.函数柯里化 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...
- JavaScript 专题之函数柯里化
JavaScript 专题系列第十三篇,讲解函数柯里化以及如何实现一个 curry 函数 定义 维基百科中对柯里化 (Currying) 的定义为: In mathematics and comput ...
- [转载] 纯函数和函数柯里化
参考链接: 用示例编写Java柯里化Currying函数 文章目录 纯函数什么是纯函数纯函数例子非纯函数例子 函数柯里化函数柯里化简单例子参数复用 纯函数 什么是纯函数 如果函数的调用参数相同,则永远 ...
最新文章
- lamp黄金组合apache+mysql+php的安装
- CSDN粉丝解答:六月份第二期精选——简单bug处理、资料索取、编程系统设计等
- 1100 Mars Numbers (20 分)【难度: 一般 / 知识点: 模拟】
- 【NLP】NLP提效,除了选择合适的模型,就是数据增强了
- webstorm的安装
- 映客上云 助力《疫战到底》系列课程吸引数千万用户观看
- 筛选出英语与计算机成绩之和,职称计算机和英语考试的成绩什么地方能够查到 – 手机爱问...
- 你分得清楚Maven的聚合和继承吗?
- 上周热点回顾(8.26-9.1)
- win10 笔记本 右下角出现 天气的解决办法
- Photoshop插件-证件照-2寸裁剪-2寸排版-脚本开发-PS插件
- 微信更新,干掉手机输入法
- 软件工程之高质量代码(编码规范)
- oppoa83t怎么升级android8,OPPO A83t原版系统刷机包_OPPO A83t最新升级包更新下载
- 数据挖掘数据预处理(验证性)
- 2020云米5G战略新品发布,超越时代探索“互联未来•互动家”
- WebSocket - 一篇文章读懂websocket
- RK3288 LED驱动编写准备
- wsl linux 桌面_(Windows)桌面上Linux年-WSL技巧和窍门
- 世界坐标系和图像坐标系的对应关系