Created
September 13, 2015 16:36
-
-
Save lucasrpb/996b8ce35ed1e992481c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Main extends App { | |
// Uma obs: tá vendo que não é necessário declarar que vai retornar String? (o compilador "adivinha" o tipo de retorno) | |
implicit def int2String(i: Int) = i.toString | |
var n: String = 2 | |
println(s"""n | |
Este é um bloco de multiplas linhas de string :P (adoro isso em Scala) | |
Esse é o nosso número: $n | |
""") | |
/* | |
Trait é uma interface (declara métodos que uma classe herdeira deve implementar e pode ter médotos default | |
implementados) | |
*/ | |
abstract class Converter[S, T] { | |
def convert(s: S): T | |
} | |
case class ConverterImpl() extends Converter[Int, String] { | |
override def convert(s: Int): String = { | |
s.toString | |
} | |
} | |
/* | |
Instancia um converter de Int para String. Colocando como implicit val dizemos para o compilador que | |
este é um tipo que pode ser capturado implicitamente por outra funcao, se preciso for | |
*/ | |
implicit val c = ConverterImpl() | |
/* | |
Nesta funcao implicitamente o compilador completa o parâmetro no segundo conjunto pegando o c que declaramos | |
como val (acima), ou seja, na hora de chamar a funcao vc nao precisa passar esse parâmetro, pois ele acha | |
implicitamente! | |
*/ | |
def doTheMagic(s: Int)(implicit c: Converter[Int, String]) = { | |
c.convert(s) | |
} | |
val r = doTheMagic(3434) | |
println(s"$r é ${r.getClass}") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment