值不是类型参数 F[] 的成员
value is not a member of type parameter F[]
我有这个代码:
trait ModelDataService[F[_]] {
def getModelVersion(modelVersionId: Long): F[ModelVersion]
}
class ModelDataServiceIdInterpreter[F[_] : Monad] extends ModelDataService[F] {
override def getModelVersion(modelVersionId: Long): F[ModelVersion] = {
val mv = ModelVersion(1, 1, "ModelType", "Status", None, None, Some(ModelContract("ModelName", Some(ModelSignature("infer", Seq(ModelField(name="blah", profile=DataProfileType.NUMERICAL)), Seq.empty[ModelField])))), None, "", None)
Monad[F].pure(mv)
}
}
我正在尝试这样做:
val model = modelDataService.getModelVersion(modelVersionId)
val batchSize = model.monitoringConfiguration
我遇到编译错误
value monitoringConfiguration is not a member of type parameter F[a.grpc.entities.ModelVersion]
但是,a.grpc.entities.ModelVersion
有 monitoringConfiguration
字段。我猜这与F
有关。有没有办法可以访问 model
中的 batchSize
?
这取决于您对 higher-kinded 类型 F
的限制。如果您的 F
是仿函数,那么您可以使用 map
访问其中的值。如果 F
是 FlatMap
或 Monad
,您也可以使用 flatMap
.
val batchSize: F[Long] =
modelDataService
.getModelVersion(modelVersionId)
.map(_.monitoringConfiguration)
程序的结构方式是您的值始终在 F
内部,直到您真正需要将其取出。这是通过将 F
初始化为某种具体类型来完成的,例如IO
来自 cats-effect,或来自原生 scala 库的 Future
。或者,如果您不执行任何 side-effects,它可以像 Option
一样简单。一旦类型是具体的,您就有不同的方法来获取值,具体取决于类型。 Future
可以是.onComplete
,Option
可以是.getOrElse
,等等
val service: ModelDataService[Option] = new ModelDataServiceIdInterpreter[Option]
val maybeBatchSize: Option[Long] =
modelDataService
.getModelVersion(modelVersionId)
.map(_.monitoringConfiguration)
val batchSizeDefaultValue = 10L
val batchSize = maybeBatchSize.getOrElse(batchSizeDefaultValue)
我有这个代码:
trait ModelDataService[F[_]] {
def getModelVersion(modelVersionId: Long): F[ModelVersion]
}
class ModelDataServiceIdInterpreter[F[_] : Monad] extends ModelDataService[F] {
override def getModelVersion(modelVersionId: Long): F[ModelVersion] = {
val mv = ModelVersion(1, 1, "ModelType", "Status", None, None, Some(ModelContract("ModelName", Some(ModelSignature("infer", Seq(ModelField(name="blah", profile=DataProfileType.NUMERICAL)), Seq.empty[ModelField])))), None, "", None)
Monad[F].pure(mv)
}
}
我正在尝试这样做:
val model = modelDataService.getModelVersion(modelVersionId)
val batchSize = model.monitoringConfiguration
我遇到编译错误
value monitoringConfiguration is not a member of type parameter F[a.grpc.entities.ModelVersion]
但是,a.grpc.entities.ModelVersion
有 monitoringConfiguration
字段。我猜这与F
有关。有没有办法可以访问 model
中的 batchSize
?
这取决于您对 higher-kinded 类型 F
的限制。如果您的 F
是仿函数,那么您可以使用 map
访问其中的值。如果 F
是 FlatMap
或 Monad
,您也可以使用 flatMap
.
val batchSize: F[Long] =
modelDataService
.getModelVersion(modelVersionId)
.map(_.monitoringConfiguration)
程序的结构方式是您的值始终在 F
内部,直到您真正需要将其取出。这是通过将 F
初始化为某种具体类型来完成的,例如IO
来自 cats-effect,或来自原生 scala 库的 Future
。或者,如果您不执行任何 side-effects,它可以像 Option
一样简单。一旦类型是具体的,您就有不同的方法来获取值,具体取决于类型。 Future
可以是.onComplete
,Option
可以是.getOrElse
,等等
val service: ModelDataService[Option] = new ModelDataServiceIdInterpreter[Option]
val maybeBatchSize: Option[Long] =
modelDataService
.getModelVersion(modelVersionId)
.map(_.monitoringConfiguration)
val batchSizeDefaultValue = 10L
val batchSize = maybeBatchSize.getOrElse(batchSizeDefaultValue)