Scala:有一种通用的方法来修剪案例类的所有String字段吗?
发布时间:2020-12-16 18:09:39 所属栏目:安全 来源:网络整理
导读:我需要一种通用的方法(例如某些函数),它接受case类的实例(任何类型)并返回此实例的副本,但带有修剪后的字符串. (最好没有反射) 任何的想法? 解决方法 您可以使用 shapeless执行此操作: import shapeless._import shapeless.ops.hlist._// Trims if passed
我需要一种通用的方法(例如某些函数),它接受case类的实例(任何类型)并返回此实例的副本,但带有修剪后的字符串.
(最好没有反射) 任何的想法? 解决方法
您可以使用
shapeless执行此操作:
import shapeless._ import shapeless.ops.hlist._ // Trims if passed a String value,otherwise returns the value unchanged object Trimmer extends Poly1 { implicit val stringTrim = at[String] { _.trim } implicit def noop[T] = at[T] { identity } } // Uses a Generic to transform the instance into an HList,maps over it // and convert it back into the case class def trimCaseClass[C,H <: HList](c: C) (implicit g: Generic.Aux[C,H],m: Mapper.Aux[Trimmer.type,H,H]): C = { val hlist = g.to(c) val trimmed = hlist.map(Trimmer) g.from(trimmed) } 然后: scala> case class A(s1: String,s2: String,i: Int) defined class A scala> val a = A(" 1 ","2",3) a: A = A( 1,2,3) scala> trimCaseClass(a) res0: A = A(1,3) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |