将参数传递给构造中的对象

时间:2016-04-03 09:43:13

标签: scala

<button type="button" class="btn btn-info" id="resetBtn">Reset form</button> 需要保留全局可用的缓存。为了初始化缓存,需要传递一个从应用程序中运行的第三方框架获得的变量。

由于对象不接受构造函数参数,如何将变量从框架传递给对象以便在对象构造期间可用?

解决方法是在对象上使用init方法(接受第三方框架变量),并添加一些脚手架代码。但是,还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

通常,您不会在object上放置可变状态。但是如果你真的需要,可以在其上放置一个var字段。

object TheObject {
    var globalMutableState: Option[TheStateType] = None
}

无论需要设置哪个状态都可以通过作业完成。

TheObject.globalMutableState = Some(???)

无论需要什么引用它都可以直接这样做。

TheObject.globalMutableState.get

答案 1 :(得分:1)

嗯所以我不建议你自己写一个缓存。有些图书馆可以更好地完成工作。这个名为Mango的Scala项目包含了基于Java的Guava库,它提供了缓存功能。

您可以编写这样的代码(来自文档),

import java.util.concurrent.TimeUnit
import org.feijoas.mango.common.cache._

// the function to cache
val expensiveFnc = (str: String) => str.length  //> expensiveFnc  : String => Int 

// create a cache with a maximum size of 100 and 
// exiration time of 10 minutes
val cache = CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(expensiveFnc)              //> cache  : LoadingCache[String,Int]

cache("MyString")  //

此外,还有一个名为ScalaCache的简单库。 Check it here这仅适用于Scala 2.11,因为使用了宏。