Skip to content

Instantly share code, notes, and snippets.

@pablitar
Created May 19, 2018 18:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pablitar/6cd5e42b49d36d61178ac5ccc1772bca to your computer and use it in GitHub Desktop.
Save pablitar/6cd5e42b49d36d61178ac5ccc1772bca to your computer and use it in GitHub Desktop.
package ar.edu.tadp.granja
import scala.collection.mutable.Set
object GranjaApp extends App {
class Animal {
var peso = 100
def come = peso += 10
def estaGordo = peso >= 150
}
class Vaca extends Animal {
def ordeñate = peso -= 10
}
class VacaLoca extends Vaca {
def reite = "Muajajajjaajja"
}
class Caballo extends Animal {
def relincha = "IEIIEIEeeeeieeie"
}
var vaca: Vaca = new Vaca
val caballo: Caballo = new Caballo
vaca.ordeñate
var miColeccion: Set[Animal] = Set(new Vaca, new Vaca, new VacaLoca)
miColeccion = miColeccion.filter(_.estaGordo)
class Lechero {
def ordeñar(corral: Corral[Vaca]) =
corral.animales.foreach(_.ordeñate)
}
class Pastor {
def pastorear(animales: List[Animal]) =
animales.foreach(_.come)
}
class Corral[+T <: Animal](val animales: List[T]) {
def contiene[U >: T](uno: U) = animales.contains(uno)
def primero(): T = ???
def agregar[U >: T <: Animal](uno: U) = new Corral(uno :: animales)
def corralQueCumple(f: Function1[T, Boolean]) =
new Corral(animales.filter(f))
}
val corralito: Corral[Vaca] = new Corral(
List(new Vaca, new Vaca, new Vaca))
val otroCorralito = corralito.agregar(new Caballo)
val lechero = new Lechero
val pastor = new Pastor
//pastor.pastorear(corralito.animales)
lechero.ordeñar(corralito)
var f: Vaca => Vaca = _
def g(vaca: Vaca): Vaca = ??? // Recibe una Vaca y devuelve una Vaca
def h(vaca: Vaca): Animal = ??? // Devuelve un Animal
def i(vaca: Vaca): VacaLoca = ??? // Devuelve una VacaLoca
def j(vacaLoca: VacaLoca): Vaca = ??? // Recibe una VacaLoca
def k(animal: Animal): Vaca = ??? // Recibe un Animal
def l(animal: Animal): VacaLoca = ???
f = l
f(new Vaca).ordeñate
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment