Scala学习笔记(七):Rational、隐式转换、偏函数、闭包、重复参数及柯里化
2024-10-19 01:29:29
class Rational(n: Int, d: Int) {
require(d != 0)
private val g: Int = gcd(n, d)
val number: Int = n / g
val denom: Int = d / g
def this(n: Int) = this(n, 1)
override def toString: String =
if (denom != 1) number + "/" + denom else number.toString
def add(that: Rational): Rational = {
new Rational(number * that.denom + denom * that.number, denom * that.denom)
}
def +(x: Int): Rational = {
add(new Rational(x))
}
def +(that: Rational): Rational = add(that)
private def gcd(a: Int, b: Int): Int = {
if (b == 0) a else gcd(b, a % b)
}
}
object Rational extends App {
val rational1: Rational = new Rational(1, 2)
val rational2: Rational = new Rational(1, 2)
val add: Rational = rational1 + rational2
println(s"add=======>$add")
//隐式转换
implicit def intToRational(x: Int): Rational = new Rational(x)
println("Int*Iational===>" + 2 + intToRational(2))
//偏函数
val sum = (x: Int, y: Int, z: Int) => x + y + z
val b = sum(1, _: Int, 3)
println(b(1))
//闭包
val more = 1
val offset = (x: Int) => x + more
//重复参数
def echo(s: String*): Unit = s.foreach(println)
echo("a", "b")
//柯里化
def curriedSum(x: Int)(y: Int) = x + y
val add1 = (x: Int) => curriedSum(1) _
println(add1)
}
最新文章
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
- JAVA XML
- 简单横道图Demo
- Android 程序崩溃后的处理
- javascript 函数详解2 -- arguments
- 【Android测试】【随笔】模拟长按电源键
- DataGridView绑定数据库,取得的数据插入到DataGridView指定列(一)
- Jquery暴力解数独
- Matlab中transpose函数的使用
- Android 自定义Gallery浏览图片
- 算法---高速分拣(quick sort)
- linux 下的文件目录操作之遍历目录
- Handler的解析和使用
- Win10安装Ubuntu14.04.5双系统(显示器为DP接口)
- for each ...in / for ...in / for...of
- java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况
- ssm项目中遇到微信用户名称带有表情,插入失败问题
- Ant Design 日期选择组件RangePicker 选择时间范围后计算范围内的天数。
- print 输出到文件
- js性能提高篇