Scala学习笔记(七):Rational、隐式转换、偏函数、闭包、重复参数及柯里化

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)
}
posted @   舒山  阅读(378)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示