我有一个随机数类,它生成随机的number.However,我希望它作为类成员被初始化,这样我们就不需要在每个call.Below中重新生成,这是目前的代码。
import ml.combust.mleap.core.Model
import ml.combust.mleap.core.types._
case class RandomNumberModel() extends Model{
def apply(input: String): Double = {
val rnd = scala.util.Random
return rnd.nextFloat
}
override def inputSchema: StructType = StructType("input" -> ScalarType.String).get
override def outputSchema: StructType = StructType("output" -> ScalarType.Double ).get
}我是scala新手,需要建议我在这里需要做哪些更改?
发布于 2019-02-18 15:48:35
试一试
case class RandomNumberModel() extends Model {
private val rnd = scala.util.Random
def apply(input: String): Double = rnd.nextFloat
override def inputSchema: StructType = StructType("input" -> ScalarType.String).get
override def outputSchema: StructType = StructType("output" -> ScalarType.Double ).get
}发布于 2019-02-18 17:05:21
这主要是对你自己答案的回应,但不适合评论。
与使用var _instance和def instance相比,
lazy val。使用它,我们可以得到对象inst { // private在伴生类private lazy val RandomNumberModel : RandomNumberModel.instance
RandomNumberModel时,你总是需要初始化实例,在这种情况下,你实际上没有从lazy中获得任何好处,只有一些小的开销。伴生对象中的非惰性val只有在装入类时才会被初始化,例如,当您创建类的第一个实例时。所以private val instance : Random = scala.util.Random.
RandomNumberModel.instance案例类RandomNumberModel()扩展模型{ def apply(input: String):Double ={ RandomNumberModel.instance.nextFloat //为什么不使用nextDouble?} ... }
Random。如果您的程序曾经有多个线程操作模型,请注意如果您使用ThreadLocalRandom,它会自动处理初始化:
case类RandomNumberModel()扩展模型{ def apply(input: String):Double ={ ThreadLocalRandom.current.nextFloat } ... } //对象RandomNumberModel消失了
RandomNumberModel%s都相等?如果不是,就不要把它设为case class.发布于 2019-02-18 16:21:25
我尝试了如下,这是否可以正常工作,或者我在这里做错了什么:
case class RandomNumberModel() extends Model{
import RandomNumberModel._
val inst = instance()
def apply(input: String): Double = {
inst.nextFloat
}
override def inputSchema: StructType = StructType("input" -> ScalarType.String).get
override def outputSchema: StructType = StructType("output" -> ScalarType.Double ).get
}
object RandomNumberModel {
private var _instance : Random = null
def instance() = {
if (_instance == null)
_instance = scala.util.Random
_instance
}
}https://stackoverflow.com/questions/54741820
复制相似问题