续前文: 中文代码示例之Programming in Scala学习笔记第二三章. 同样仅节选有意思的例程部分作演示之用. 源文档仍在: program-in-chinese/Programming_in_Scala_study_notes_zh

第六章 功能对象

此章的例子与之前的初步尝试将传统学科的内容程序/数据化有些共鸣, 以后的数学知识部分可以参考此实现.

class 有理数(分子: Int, 分母: Int) {
  require(分母 != 0)
  private val 公约数 = 最大公约数(分子.abs, 分母.abs)

  val 分子值: Int = 分子 / 公约数
  val 分母值: Int = 分母 / 公约数

  def this(: Int) = this(, 1)

  def + (: 有理数): 有理数 =
    new 有理数(
      分子值 * .分母值 + .分子值 * 分母值,
      分母值 * .分母值
    )

  def + (: Int): 有理数 =
    new 有理数(分子值 +  * 分母值, 分母值)

  def - (: 有理数): 有理数 =
    new 有理数(
      分子值 * .分母值 - .分子值 * 分母值,
      分母值 * .分母值
    )

  def - (: Int): 有理数 =
    new 有理数(分子值 -  * 分母值, 分母值)

  def * (: 有理数): 有理数 =
    new 有理数(分子值 * .分子值, 分母值 * .分母值)

  def * (: Int): 有理数 =
    new 有理数(分子值 * , 分母值)

  def / (: 有理数): 有理数 =
    new 有理数(分子值 * .分母值, 分母值 * .分子值)

  def / (: Int): 有理数 =
    new 有理数(分子值, 分母值 * )

  override def toString = 分子值 + "/" + 分母值
  
  private def 最大公约数(: Int, : Int): Int =
    if ( == 0)  else 最大公约数(,  % )
}

第四章 类和对象

// 在文件"校验累加器.scala"中
import scala.collection.mutable

object 校验累加器 {
  private val 缓存 = mutable.Map.empty[String, Int]

  def 计算(文本: String): Int =
    if (缓存.contains(文本))
      缓存(文本)
    else {
      val 累加器 = new 校验累加器
      for (字符 <- 文本)
        累加器.(字符.toByte)
      val 校验码 = 累加器.校验()
      缓存 += (文本 -> 校验码)
      校验码
    }
}