Skip to content

Commit

Permalink
Merge pull request adambard#715 from Measuring/master
Browse files Browse the repository at this point in the history
English - Scala - Changes to pattern matching, string interpolation and file writing
  • Loading branch information
levibostian committed Aug 17, 2014
2 parents 0b2f1ff + 775c7fa commit cdd1391
Showing 1 changed file with 30 additions and 12 deletions.
42 changes: 30 additions & 12 deletions scala.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,6 @@ Person("George", "1234") == Person("Kate", "1236")




// Pattern matching

val me = Person("George", "1234")
Expand All @@ -322,15 +321,21 @@ kate match { case Person("Kate", _) => "Girl"; case Person("George", _) => "Boy"


// Regular expressions

val email = "(.*)@(.*)".r // Invoking r on String makes it a Regex

val email(user, domain) = "henry@zkpr.com"

"mrbean@pyahoo.com" match {
case email(name, domain) => "I know your name, " + name
val serialKey = """(\d{5})-(\d{5})-(\d{5})-(\d{5})""".r // Using verbatim (multiline) syntax

val matcher = (value: String) => {
println(value match {
case email(name, domain) => s"It was an email: $name"
case serialKey(p1, p2, p3, p4) => s"Serial key: $p1, $p2, $p3, $p4"
case _ => s"No match on '$value'" // default if no match found
})
}

matcher("mrbean@pyahoo.com") // => "It was an email: mrbean"
matcher("nope..") // => "No match on 'nope..'"
matcher("52917") // => "No match on '52917'"
matcher("52752-16432-22178-47917") // => "Serial key: 52752, 16432, 22178, 47917"


// Strings
Expand All @@ -347,17 +352,27 @@ println("ABCDEF".length)
println("ABCDEF".substring(2, 6))
println("ABCDEF".replace("C", "3"))

// String interpolation
val n = 45
println(s"We have $n apples")
println(s"We have $n apples") // => "We have 45 apples"

// Expressions inside interpolated strings are also possible
val a = Array(11, 9, 6)
println(s"My second daughter is ${a(2-1)} years old")
println(s"My second daughter is ${a(0) - a(2)} years old.") // => "My second daughter is 5 years old."
println(s"We have double the amount of ${n / 2.0} in apples.") // => "We have double the amount of 22.5 in apples."
println(s"Power of 2: ${math.pow(2, 2)}") // => "Power of 2: 4"

// Formatting with interpolated strings (note the prefixed f)
println(f"Power of 5: ${math.pow(5, 2)}%1.0f") // "Power of 5: 25"
println(f"Square root of 122: ${math.sqrt(122)}%1.4f") // "Square root of 122"

// Ignoring special characters.
println(raw"New line feed: \n. Carriage return: \r.") // => "New line feed: \n. Carriage return: \r."

// Some characters need to be 'escaped', e.g. a double quote inside a string:
val a = "They stood outside the \"Rose and Crown\""
val a = "They stood outside the \"Rose and Crown\"" // => "They stood outside the "Rose and Crown""

// Triple double-quotes let strings span multiple rows and contain quotes

val html = """<form id="daform">
<p>Press belo', Joe</p>
| <input type="submit">
Expand Down Expand Up @@ -403,7 +418,10 @@ for(line <- Source.fromFile("myfile.txt").getLines())
println(line)

// To write a file use Java's PrintWriter

val writer = new PrintWriter("myfile.txt")
writer.write("Writing line for line" + util.Properties.lineSeparator)
writer.write("Another line here" + util.Properties.lineSeparator)
writer.close()

```
Expand Down

0 comments on commit cdd1391

Please sign in to comment.