如何使这个代码功能?

pab*_*blo 4 functional-programming scala

我编写了一个简单的脚本,用于将c风格的标识符名称(例如invoice_number)转换为java 风格的标识符(例如,invoiceNumber).

val files = Vector("file1", "file2")
for (file <- files) {
  val in = io.Source.fromFile(file).mkString
  var out = ""
  var i = 0
  while (i < in.length) {
    val c = in(i)
    if (c == '_') {
      out += in(i + 1).toUpper
      i += 2
    } else {
      out += c
      i += 1
    }
  }
  val writer = new PrintWriter(file + "1")
  writer.write(out)
  writer.flush()
  writer.close()
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何使这个代码功能化.我想不出任何更高阶函数来替换"如果<some-condition> else递增1"逻辑则将增量i加2.谢谢.

4e6*_*4e6 6

好的,这是我的方法.

val in = "identifier" :: "invoice_number" :: "some_other_stuff" :: Nil
val out = in map(identifier => {
  val words = identifier.split("_")
  val tail = words.tail.map(_.capitalize)
  (words.head /: tail)(_ + _)
})

println(in)
println(out)
Run Code Online (Sandbox Code Playgroud)

认为它是合理的功能风格.有趣的scala大师将如何解决这个问题:)

  • +1对我来说看起来很合理,虽然我是`words.head + words.tail.map(_.capitalize).mkString`而不是最后两行. (3认同)