如何避免无参数情况class?
How to avoid parameterless case class?
我有以下代码片段,我想对其进行改进:
final case class GenderOps[F[_]]()
(implicit xa: Transactor[F],
ev: Bracket[F, Throwable]) extends GenderDb[F] {
override def create: F[Int] =
sql"""
CREATE TABLE interests
(
id smallserial NOT NULL,
interest character varying(40) NOT NULL,
PRIMARY KEY (id)
)
""".update.run.transact(xa)
override def seed[L[_] : Foldable](v: L[Gender]): F[Int] = ???
如您在代码中所见,case class
参数为空。是否可以避免 case class
?
案例class只能用于数据建模,不能用于处理。
这将是更好的塑造方式:
sealed trait GenderDb[F[_]] {
def create: F[Int]
def seed[L[_] : Foldable](v: L[Gender]): F[Int]
}
object GenderDb {
def apply[F[_]](implicit xa: Transactor[F], ev: Bracket[F, Throwable]): GenderDb[F] = new GenderDb[F] {
override def create: F[Int] =
sql"""
CREATE TABLE interests
(
id smallserial NOT NULL,
interest character varying(40) NOT NULL,
PRIMARY KEY (id)
)
""".update.run.transact(xa)
override def seed[L[_] : Foldable](v: L[Gender]): F[Int] = ???
}
}
Case class不带参数列表的情况在 Scala 2.10 中已被弃用,并在 2.11 中被定为非法。原因之一是它们可能导致confusion,例如
case class Foo
Foo // does this refer to companion object or to construction via Foo.apply()?
没有参数列表或参数列表为空的情况 class 应该 case object
而不是
case object Foo // instead of case class Foo()
但是对象不接受类型参数
case object Foo[T] // syntax error
鉴于名称 GenderOps
中的 Ops
后缀,您的意图似乎是用指示 case classes 或 case 对象可能的方法来丰富一些 class不是正确的工具。如果您想通过扩展方法进行丰富,请考虑 trait 或隐式 class。
我有以下代码片段,我想对其进行改进:
final case class GenderOps[F[_]]()
(implicit xa: Transactor[F],
ev: Bracket[F, Throwable]) extends GenderDb[F] {
override def create: F[Int] =
sql"""
CREATE TABLE interests
(
id smallserial NOT NULL,
interest character varying(40) NOT NULL,
PRIMARY KEY (id)
)
""".update.run.transact(xa)
override def seed[L[_] : Foldable](v: L[Gender]): F[Int] = ???
如您在代码中所见,case class
参数为空。是否可以避免 case class
?
案例class只能用于数据建模,不能用于处理。
这将是更好的塑造方式:
sealed trait GenderDb[F[_]] {
def create: F[Int]
def seed[L[_] : Foldable](v: L[Gender]): F[Int]
}
object GenderDb {
def apply[F[_]](implicit xa: Transactor[F], ev: Bracket[F, Throwable]): GenderDb[F] = new GenderDb[F] {
override def create: F[Int] =
sql"""
CREATE TABLE interests
(
id smallserial NOT NULL,
interest character varying(40) NOT NULL,
PRIMARY KEY (id)
)
""".update.run.transact(xa)
override def seed[L[_] : Foldable](v: L[Gender]): F[Int] = ???
}
}
Case class不带参数列表的情况在 Scala 2.10 中已被弃用,并在 2.11 中被定为非法。原因之一是它们可能导致confusion,例如
case class Foo
Foo // does this refer to companion object or to construction via Foo.apply()?
没有参数列表或参数列表为空的情况 class 应该 case object
而不是
case object Foo // instead of case class Foo()
但是对象不接受类型参数
case object Foo[T] // syntax error
鉴于名称 GenderOps
中的 Ops
后缀,您的意图似乎是用指示 case classes 或 case 对象可能的方法来丰富一些 class不是正确的工具。如果您想通过扩展方法进行丰富,请考虑 trait 或隐式 class。