def safePrint1
[T
](toString
: T
=> String
): PartialFunction
[Any, Unit
] = { case x
: T
=> println
(Try
(toString
(x
))) }
def safePrint2
[T
: Manifest
](toString
: T
=> String
): PartialFunction
[Any, Unit
] = { case x
: T
=> println
(Try
(toString
(x
))) }
def iToS
(x
: Int
) = s
"$x.0" def bToS
(x
: Boolean
) = if (x
) "yes" else "no"
val printAny1
= safePrint1
[Int
](iToS
) orElse safePrint1
[Boolean
](bToS
) val printAny2
= safePrint2
[Int
](iToS
) orElse safePrint2
[Boolean
](bToS
)
printAny1(10)
printAny2(10)
}
aW1wb3J0IHNjYWxhLnV0aWwuVHJ5CgpvYmplY3QgTWFpbiBleHRlbmRzIEFwcCB7CglkZWYgc2FmZVByaW50MVtUXSh0b1N0cmluZzogVCA9PiBTdHJpbmcpOiBQYXJ0aWFsRnVuY3Rpb25bQW55LCBVbml0XSA9IHsKCQljYXNlIHg6IFQgPT4gcHJpbnRsbihUcnkodG9TdHJpbmcoeCkpKQoJfQoJCglkZWYgc2FmZVByaW50MltUIDogTWFuaWZlc3RdKHRvU3RyaW5nOiBUID0+IFN0cmluZyk6IFBhcnRpYWxGdW5jdGlvbltBbnksIFVuaXRdID0gewoJCWNhc2UgeDogVCA9PiBwcmludGxuKFRyeSh0b1N0cmluZyh4KSkpCgl9CgkKCWRlZiBpVG9TKHg6IEludCkgPSBzIiR4LjAiCglkZWYgYlRvUyh4OiBCb29sZWFuKSA9IGlmICh4KSAieWVzIiBlbHNlICJubyIKCgl2YWwgcHJpbnRBbnkxID0gc2FmZVByaW50MVtJbnRdKGlUb1MpIG9yRWxzZSBzYWZlUHJpbnQxW0Jvb2xlYW5dKGJUb1MpCgl2YWwgcHJpbnRBbnkyID0gc2FmZVByaW50MltJbnRdKGlUb1MpIG9yRWxzZSBzYWZlUHJpbnQyW0Jvb2xlYW5dKGJUb1MpCgoJcHJpbnRBbnkxKDEwKQoJcHJpbnRBbnkxKHRydWUpCgoJcHJpbnRBbnkyKDEwKQoJcHJpbnRBbnkyKHRydWUpCn0=