Console

object Console extends AnsiColor

Implements functionality for printing Scala values on the terminal.

Implements functionality for printing Scala values on the terminal. For reading values use StdIn. Also defines constants for marking up text on ANSI terminals.

Console Output

Use the print methods to output text.

scala> Console.printf(
  "Today the outside temperature is a balmy %.1f°C. %<.1f°C beats the previous record of %.1f°C.\n",
  -137.0,
  -135.05)
Today the outside temperature is a balmy -137.0°C. -137.0°C beats the previous record of -135.1°C.

ANSI escape codes

Use the ANSI escape codes for colorizing console output either to STDOUT or STDERR.

import Console.{GREEN, RED, RESET, YELLOW_B, UNDERLINED}

object PrimeTest {

  def isPrime(): Unit = {

    val candidate = io.StdIn.readInt().ensuring(_ > 1)

    val prime = (2 to candidate - 1).forall(candidate % _ != 0)

    if (prime)
      Console.println(s"${RESET}${GREEN}yes${RESET}")
    else
      Console.err.println(s"${RESET}${YELLOW_B}${RED}${UNDERLINED}NO!${RESET}")
  }

  def main(args: Array[String]): Unit = isPrime()

}

$ scala PrimeTest
1234567891
yes
$ scala PrimeTest
56474
NO!

IO redefinition

Use IO redefinition to temporarily swap in a different set of input and/or output streams. In this example the stream based method above is wrapped into a function.

import java.io.{ByteArrayOutputStream, StringReader}

object FunctionalPrimeTest {

  def isPrime(candidate: Int): Boolean = {

    val input = new StringReader(s"$candidate\n")
    val outCapture = new ByteArrayOutputStream
    val errCapture = new ByteArrayOutputStream

    Console.withIn(input) {
      Console.withOut(outCapture) {
        Console.withErr(errCapture) {
          PrimeTest.isPrime()
        }
      }
    }

    if (outCapture.toByteArray.nonEmpty) // "yes"
      true
    else if (errCapture.toByteArray.nonEmpty) // "NO!"
      false
    else throw new IllegalArgumentException(candidate.toString)
  }

  def main(args: Array[String]): Unit = {
    val primes = (2 to 50) filter (isPrime)
    println(s"First primes: $primes")
  }

}

$ scala FunctionalPrimeTest
First primes: Vector(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47)

trait AnsiColor
class Object
trait Matchable
class Any

Console Output

These methods provide output via the console.

def flush(): Unit

Flushes the output stream.

Flushes the output stream. This function is required when partial output (i.e. output not terminated by a newline character) has to be made visible on the terminal.

def println(): Unit

Prints a newline character on the default output.

Prints a newline character on the default output.

def println(x: Any): Unit

Prints out an object to the default output, followed by a newline character.

Prints out an object to the default output, followed by a newline character.

Value Params
x

the object to print.

def printf(text: String, args: Any*): Unit

Prints its arguments as a formatted string to the default output, based on a string pattern (in a fashion similar to printf in C).

Prints its arguments as a formatted string to the default output, based on a string pattern (in a fashion similar to printf in C).

The interpretation of the formatting patterns is described in java.util.Formatter.

Value Params
args

the arguments used to instantiating the pattern.

text

the pattern for formatting the arguments.

Throws
java.lang.IllegalArgumentException

if there was a problem with the format string or arguments

IO Defaults

These values provide direct access to the standard IO channels

The default output, can be overridden by withOut

The default output, can be overridden by withOut

The default error, can be overridden by withErr

The default error, can be overridden by withErr

The default input, can be overridden by withIn

The default input, can be overridden by withIn

IO Redefinition

These methods allow substituting alternative streams for the duration of a body of code. Threadsafe by virtue of scala.util.DynamicVariable.

def withOut[T](out: PrintStream)(thunk: => T): T

Sets the default output stream for the duration of execution of one thunk.

Sets the default output stream for the duration of execution of one thunk.

Value Params
out

the new output stream.

thunk

the code to execute with the new output stream active

Returns

the results of thunk

See also

withOut[T](out:OutputStream)(thunk: => T)

Example

withOut(Console.err) { println("This goes to default _error_") }
def withOut[T](out: OutputStream)(thunk: => T): T

Sets the default output stream for the duration of execution of one thunk.

Sets the default output stream for the duration of execution of one thunk.

Value Params
out

the new output stream.

thunk

the code to execute with the new output stream active

Returns

the results of thunk

See also

withOut[T](out:PrintStream)(thunk: => T)

def withErr[T](err: PrintStream)(thunk: => T): T

Set the default error stream for the duration of execution of one thunk.

Set the default error stream for the duration of execution of one thunk.

Value Params
err

the new error stream.

thunk

the code to execute with the new error stream active

Returns

the results of thunk

See also

withErr[T](err:OutputStream)(thunk: => T)

Example

withErr(Console.out) { err.println("This goes to default _out_") }
def withErr[T](err: OutputStream)(thunk: => T): T

Sets the default error stream for the duration of execution of one thunk.

Sets the default error stream for the duration of execution of one thunk.

Value Params
err

the new error stream.

thunk

the code to execute with the new error stream active

Returns

the results of thunk

See also

withErr[T](err:PrintStream)(thunk: => T)

def withIn[T](reader: Reader)(thunk: => T): T

Sets the default input stream for the duration of execution of one thunk.

Sets the default input stream for the duration of execution of one thunk.

Value Params
thunk

the code to execute with the new input stream active

Returns

the results of thunk

See also

withIn[T](in:InputStream)(thunk: => T)

Example

val someFile:Reader = openFile("file.txt")
withIn(someFile) {
  // Reads a line from file.txt instead of default input
  println(readLine)
}
def withIn[T](in: InputStream)(thunk: => T): T

Sets the default input stream for the duration of execution of one thunk.

Sets the default input stream for the duration of execution of one thunk.

Value Params
in

the new input stream.

thunk

the code to execute with the new input stream active

Returns

the results of thunk

See also

withIn[T](reader:Reader)(thunk: => T)

color-magenta

final val MAGENTA: "\033[35m"

Foreground color for ANSI magenta

Foreground color for ANSI magenta

Inherited from
AnsiColor
final val MAGENTA_B: "\033[45m"

Background color for ANSI magenta

Background color for ANSI magenta

Inherited from
AnsiColor

color-blue

final val BLUE: "\033[34m"

Foreground color for ANSI blue

Foreground color for ANSI blue

Inherited from
AnsiColor
final val BLUE_B: "\033[44m"

Background color for ANSI blue

Background color for ANSI blue

Inherited from
AnsiColor

color-red

final val RED: "\033[31m"

Foreground color for ANSI red

Foreground color for ANSI red

Inherited from
AnsiColor
final val RED_B: "\033[41m"

Background color for ANSI red

Background color for ANSI red

Inherited from
AnsiColor

color-cyan

final val CYAN: "\033[36m"

Foreground color for ANSI cyan

Foreground color for ANSI cyan

Inherited from
AnsiColor
final val CYAN_B: "\033[46m"

Background color for ANSI cyan

Background color for ANSI cyan

Inherited from
AnsiColor

style-control

final val UNDERLINED: "\033[4m"

ANSI underlines

ANSI underlines

Inherited from
AnsiColor
final val RESET: "\033[0m"

Reset ANSI styles

Reset ANSI styles

Inherited from
AnsiColor
final val BOLD: "\033[1m"

ANSI bold

ANSI bold

Inherited from
AnsiColor
final val INVISIBLE: "\033[8m"

ANSI invisible

ANSI invisible

Inherited from
AnsiColor
final val REVERSED: "\033[7m"

ANSI reversed

ANSI reversed

Inherited from
AnsiColor

color-yellow

final val YELLOW_B: "\033[43m"

Background color for ANSI yellow

Background color for ANSI yellow

Inherited from
AnsiColor
final val YELLOW: "\033[33m"

Foreground color for ANSI yellow

Foreground color for ANSI yellow

Inherited from
AnsiColor

color-white

final val WHITE_B: "\033[47m"

Background color for ANSI white

Background color for ANSI white

Inherited from
AnsiColor
final val WHITE: "\033[37m"

Foreground color for ANSI white

Foreground color for ANSI white

Inherited from
AnsiColor

color-black

final val BLACK_B: "\033[40m"

Background color for ANSI black

Background color for ANSI black

Inherited from
AnsiColor
final val BLACK: "\033[30m"

Foreground color for ANSI black

Foreground color for ANSI black

Inherited from
AnsiColor

color-green

final val GREEN: "\033[32m"

Foreground color for ANSI green

Foreground color for ANSI green

Inherited from
AnsiColor
final val GREEN_B: "\033[42m"

Background color for ANSI green

Background color for ANSI green

Inherited from
AnsiColor