Skip to content

Instantly share code, notes, and snippets.

@lucasrpb
Created September 13, 2015 16:36
Show Gist options
  • Save lucasrpb/996b8ce35ed1e992481c to your computer and use it in GitHub Desktop.
Save lucasrpb/996b8ce35ed1e992481c to your computer and use it in GitHub Desktop.
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