Skip to content

marcesquerra/KissNumber

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KissNumber

KissNumber is an alternative boxing for numeric variables in Scala.

What you need to know about KissNumber:

  • Number is the parent type for both integer and floating point values.
  • An IntegerNumber holds an integer value (it wraps a Long)
  • A RealNumber holds a floating point value (it wraps a Double)
  • All the operations that can be performed in a Double can be performed in a RealNumber (including the existence of an implicit RichRealNumber)
  • All the operations that can be performed in a Long can be performed in a IntegerNumber (including the existence of an implicit RichIntegerNumber) except ...
    • the '/' operator performs a floating point division and ...
    • a '/%' operator is provided instead, which returns a Pair containing the integer quotient and the modulus
  • All the operations that IntegerNumber and RealNumber have in common can be performed directly on a Number (including the existence of an implicit RichNumber). Hence that IntegerNumber performs floating point divisions.
  • Implicit bidirectional conversions between standard Scala values (Int, Float, Double, ...) and the adequate Number types are provided

Examples

import com.bryghts.kissnumber._

object Examples extends App
{

    val n: Number = 3

    def foo(x: Number, y: Number, z: Number): Number = x + y / z

    val a: IntegerNumber = 1
    val b: RealNumber    = 2.3
    val c: Number        = 67

    val d = foo(a, b, c)

    println(d)

    val l: List[Number] = List(1, 4.5, 2, 3, -2)

    println(l.map{_ * 2}.mkString(","))

    println(l.sorted.mkString(","))

}

Get it

Maven Dependency:

<dependency>
  <groupId>com.bryghts.kissnumber</groupId>
  <artifactId>kissnumber_2.10</artifactId>
  <version>0.0.3</version>
</dependency>

Sbt Dependency:

libraryDependencies += "com.bryghts.kissnumber" % "kissnumber_2.10" % "0.0.3"