1

ケースクラスのリストを取得し、それらを単一のコンマ区切り文字列 (見出しまたは末尾のコンマなし) に変換する必要があります。

case class State(name: String)

def toLine(states: State*): String = {
}

したがって、toLine(State("one"), State("two"), State("three")) は one,two,three を返す必要があります

これが私が考えたものです。より良い方法はありますか?

def toLine(states: State*): String = {
  states match {
    case s if s.isEmpty => throw new Exception
    case s => s.tail.foldLeft(s.head.name)(_+","+_) 
  }
}

リストに少なくとも1つの値があることを保証する方法はありますか?

4

2 に答える 2

3

使用できますmkString

def toLine(states: State*): String = states.map(_.name).mkString(",")

少なくとも1つの要素を確保する必要がある場合は、次のことができます:

def toLine(state: State, states: State*) = (state +: states).map(_.name).mkString(",")
于 2015-03-12T17:54:53.520 に答える
0

Scala のコレクションは、まさにこれを行う関数を提供します。states.map(_.name).mkString(",")

toLineが常に少なくとも 1 つの値で呼び出されるようにしたい場合は、次のようにします。

def toLine(state: State, states: State*): String = {
  states.map(_.name).mkString(",")
}

これにより、そのチェックが実行時に行われるのではなく、型システムに移動されます。

于 2015-03-12T17:54:02.597 に答える