Scala 有理數簡單應用與scala特性

這裏只是簡單的實現了一下其中的一些操做
/**
 * 有理數sample; 有理數謂之:2/3,4/6就是咱們說的分數
 * @param a 分子
 * @param b 分母
 */
class Rational(a:Int, b:Int) {
  require( b != 0)
  override def toString = s"$a / $b"

  val n = a
  val d = b

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

  def add(t:Rational) = if (d == t.d)
    new Rational(n + t.n,t.d)
  else
    new Rational(n * t.d + t.n * d, d * t.d)
  def * (t:Rational) = new Rational(n * t.n, d * t.d)

  def * (t:Int) = new Rational(n * t, d)

  def unary_- = new Rational(-n, -d)
  def + (t:Rational) = add(t)
}
object Rational {
  implicit def int2Rat(i:Int) = new Rational(i)
}

// 有理數應用測試
val r = new Rational(3, 5)    //r: Rational = 3 / 5
-r                            //res0: Rational = -3 / -5
val rr = new Rational(4)      //rr: Rational = 4 / 1
val rrr = rr * r              //rrr: Rational = 12 / 5
rr * 4                        //res1: Rational = 16 / 1
5 * rr                        //res2: Rational = 20 / 1



這裏咱們看到scala的以下幾個重要的特性:
  • 操做符就是方法 
  • 類構造方法更簡單
  • 字段定義都是不可變的
  • 類的對象都是新生成的,而非改變原始對象的狀態
  • scala的一元操做符讓程序更靈活, 譬如上例:-r 中的應用
  • implicit 的隱式轉換。 implicit是一個強大的功能,也是scala增長java的必備利器。上例中實現了int到rational對象的轉換
  • class與object。 class就是java中的class, object定義的是一個單例對象
相關文章
相關標籤/搜索