fork download
  1. object Main {
  2. def main(args: Array[String]): Unit = {
  3. println(connect())
  4. }
  5.  
  6. class IdInfo
  7. class PasswordInfo
  8. class ConnectionInfo
  9.  
  10. class IOException extends RuntimeException
  11. class AuthorizationException extends RuntimeException
  12.  
  13. def calcIdInfo(): IdInfo = new IdInfo
  14. def calcPwdInfo(id: IdInfo): PasswordInfo = new PasswordInfo
  15. def calcConnInfo(id: IdInfo, pwd: PasswordInfo): ConnectionInfo = new ConnectionInfo
  16. def verify(id:IdInfo, pwd: PasswordInfo, conn: ConnectionInfo): Unit = ()
  17.  
  18. def connect(): Option[(IdInfo, PasswordInfo, ConnectionInfo)] = {
  19. val idInfoOpt = try {
  20. Some(calcIdInfo())
  21. } catch {
  22. case ex: IOException => None
  23. }
  24.  
  25. idInfoOpt map (idInfo => {
  26. val pwdInfoOpt = try {
  27. Some(calcPwdInfo(idInfo))
  28. } catch {
  29. case ex: AuthorizationException => None
  30. }
  31.  
  32. pwdInfoOpt map (pwdInfo => {
  33. val connInfoOpt = try {
  34. Some(calcConnInfo(idInfo, pwdInfo))
  35. } catch {
  36. case ex: IOException => None
  37. }
  38.  
  39. connInfoOpt map (connInfo => {
  40. try {
  41. verify(idInfo, pwdInfo, connInfo)
  42. Some(idInfo, pwdInfo, connInfo)
  43. } catch {
  44. case ex: IOException => None
  45. case ex: AuthorizationException => None
  46. }
  47. }) getOrElse None
  48. }) getOrElse None
  49. }) getOrElse None
  50. }
  51. }
Success #stdin #stdout 0.34s 382016KB
stdin
Standard input is empty
stdout
Some((Main$IdInfo@222b9a,Main$PasswordInfo@15c8d94,Main$ConnectionInfo@1532075))