forked from scala/scala3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
patterns.scala
38 lines (31 loc) · 961 Bytes
/
patterns.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
trait Option[+a] {}
case class Some[a](x: a) extends Option[a] {
override def toString(): String = "Some(" + x + ")"
override def equals(that: Any): Boolean = that match {
case Some(x) => this.x == x
case _ => false
}
override def hashCode(): Int = getClass().hashCode() * 41 + x.hashCode()
}
case object None extends Option[Nothing] {
override def toString(): String = "None"
override def equals(that: Any) = that match {
case None => true
case _ => false
}
override def hashCode(): Int = getClass().hashCode()
}
object test {
def println(str: String): Unit = java.lang.System.out.println(str)
def print(opt: Option[String]) = opt match {
case Some(x) => println(x)
case None => println("nothing")
}
}
// if bodies are duplicated, then we would get an error like "double definition"
trait John[A,B] {
def filter(x:Any) = x match {
case (x::xs, _) => "ga"
case _ => {x:String => "foobar"}
}
}