scala - Scala:如何在Tuple的每个元素上调用trim

标签 scala tuples

我需要编写一个函数,该函数接受任意大小的字符串元组,在每个元素上调用trim,然后返回一个新的元组。我在下面的这一点有点卡住,代码已经不安全。另外,一旦将其转换为迭代器,我不知道如何返回元组。有没有更优雅的方法来解决这个问题?解决方案需要在Scala 2.9.2上运行

  def trim(input:Product)={
    input.productIterator.asInstanceOf[Iterator[String]].map(_.trim)
  }

最佳答案

如果您愿意使用使用Shapeless的解决方案,那么这非常简单(至少在Shapeless方面):

import shapeless._

object trimmer extends (String -> String)(_.trim)

def trim[T <: Product, L <: HList](t: T)(implicit
  hlister: HListerAux[T, L],
  toList: ToList[L, String],
  mapper: MapperAux[trimmer.type, L, L],
  tupler: TuplerAux[L, T]
) = hlister(t).map(trimmer).tupled

进而:
scala> trim((" a ", "b ", " c"))
res0: (String, String, String) = (a,b,c)

scala> trim((" a ", "b ", " c", "d"))
res1: (String, String, String, String) = (a,b,c,d)

一切都被适本地静态地键入,并且如果您尝试将其包含任何非String元素的元组输入,则在编译时会出现错误。

如果没有像Shapeless这样的库(可以有效地为您打包所有样板),您将有两种选择:放弃类型安全性,或者为您关心的每个元组写一个特殊情况(最多22个)。

关于scala - Scala:如何在Tuple的每个元素上调用trim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16471718/

相关文章:

scala - 对于某些项目,REPL 在 sbt 中无法使用控制台命令

error-handling - ML。 “Unzipping”元组列表。

python - 'tuple'没有属性。 OpenCV Python

scala - 使用值与参数顺序不匹配的无形 HList 调用 Scala Function2

java - Ceylon 比 Java 或 Scala 有什么优势

scala - 确保 're-start' 任务在 :test 之前自动运行

scala - 尝试保存 Spark SQL Dataframes 总是导致空目录

python - 从 Python 中的项目列表生成元组

arrays - Julia 元组数组

python - 如何解决在 python 3 中创建 SQL Lite 数据库并打印第一行名称和年龄的十六进制的回溯错误?