code_junkie

lazy loading some config params, trying to come up with a pattern in Scala

Nov 12th, 2011
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. val config:Config = new MyConfig("c:/etc/myConfig.txt")
  2. println(config.param1)
  3. println(config.param2)
  4. println(config.param3)
  5.  
  6. trait Config {
  7. lazy val param1:String = resolveParam1
  8. lazy val param2:String = resolveParam2
  9. lazy val param3:Int = resolveParam3
  10.  
  11. protected def resolveParam1:String
  12. protected def resolveParam2:String
  13. protected def resolveParam3:Int
  14. }
  15.  
  16. class MyConfig(fileName:String) extends Config {
  17. lazy val data:Map[String, Any] = readConfig
  18.  
  19. // some dummy impl here, should read from a file
  20. protected def readConfig:Map[String,Any] = Map[String, Any]("p1" -> "abc", "p2" -> "defgh", "p3" -> 43)
  21.  
  22. protected def resolveParam1:String = data.get("p1").get.asInstanceOf[String]
  23. protected def resolveParam2:String = data.get("p2").get.asInstanceOf[String]
  24. protected def resolveParam3:Int = data.get("p3").get.asInstanceOf[Int]
  25. }
  26.  
  27. trait Config {
  28. val param1: String
  29. val param2: String
  30. val param3: Int
  31. }
  32.  
  33. class MyConfig extends Config {
  34. lazy val param1 = readConfig().("p1")
  35. ...
  36.  
  37. def readConfig(): Map[String, String] = ...
  38. }
  39.  
  40. trait Config {
  41. def param1:String
  42. def param2:String
  43. def param3:Int
  44. }
  45.  
  46. class MyConfig(fileName:String) extends Config {
  47. lazy val data:Map[String, Any] = readConfig
  48.  
  49. // some dummy impl here, should read from a file
  50. protected def readConfig:Map[String,Any] =
  51. Map[String, Any]("p1" -> "abc", "p2" -> "defgh", "p3" -> 43)
  52.  
  53. def param1:String = data.get("p1").get.asInstanceOf[String]
  54. def param2:String = data.get("p2").get.asInstanceOf[String]
  55. def param3:Int = data.get("p3").get.asInstanceOf[Int]
  56. }
  57.  
  58. class MyConfig(fileName:String) extends Config {
  59. private class NonLazyConfig(val p1:String, p2:String, p3:int) extends Config {
  60. def param1 = p1
  61. def param2 = p2
  62. def param1 = p3
  63. }
  64. lazy val inner:Config = readConfig
  65.  
  66. // some dummy impl here, should read from a file
  67. protected def readConfig:Config = {
  68. return new NonLazyConfig("abc", "defgh", 43)
  69. }
  70. def param1:String = inner.param1
  71. def param2:String = inner.param2
  72. def param3:Int = inner.param3
  73. }
Add Comment
Please, Sign In to add comment