Scala 有理数简单应用与scala特性

本文介绍了一个简单的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定义的是一个单例对象

转载于:https://my.oschina.net/gouqizi/blog/632676

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值