我在某个地方看到过这个Scala代码段:
def toSentiment(sentiment: Int): Sentiment = sentiment match {
case x if x == 0 || x == 1 => Sentiment.NEGATIVE
case 2 => Sentiment.NEUTRAL
case x if x == 3 || x == 4 => Sentiment.POSITIVE
}
有没有办法更简洁地重写case
语句?我怀疑必须有一种更简单(更短)的方式来表达x if x == 0 || x == 1
条件。
顺便说一下,这个形式:
def toSentiment(sentiment: Int): Sentiment = sentiment match {
case 0 => Sentiment.NEGATIVE
case 1 => Sentiment.NEGATIVE
case 2 => Sentiment.NEUTRAL
case 3 => Sentiment.POSITIVE
case 4 => Sentiment.POSITIVE
}
不是我想要的。我希望有这样的事情:
def toSentiment(sentiment: Int): Sentiment = sentiment match {
case x in {0, 1} => Sentiment.NEGATIVE
case 2 => Sentiment.NEUTRAL
case x in {3, 4} => Sentiment.POSITIVE
}
甚至:
def toSentiment(sentiment: Int): Sentiment = sentiment match {
case 0, 1 => Sentiment.NEGATIVE
case 2 => Sentiment.NEUTRAL
case 3, 4 => Sentiment.POSITIVE
}
答案 0 :(得分:6)
这个怎么样:
def toSentiment(sentiment: Int): Sentiment = sentiment match {
case 0 | 1 ⇒ Sentiment.NEGATIVE
case 2 ⇒ Sentiment.NEUTRAL
case 3 | 4 ⇒ Sentiment.POSITIVE
}
请注意,此匹配并非详尽无遗。如果运行,可能会出现运行时错误,例如:toSentiment(5)
。一些短裤会警告你这件事。更安全的版本(假设其他任何数字都是中性的)可以是:
def toSentiment(sentiment: Int): Sentiment = sentiment match {
case 0 | 1 ⇒ Sentiment.NEGATIVE
case 3 | 4 ⇒ Sentiment.POSITIVE
case _ ⇒ Sentiment.NEUTRAL
}
答案 1 :(得分:2)
您可以执行以下操作:
def toSentiment(sentiment:Int): Sentiment = {
import Sentiment._
Vector(NEGATIVE,NEGATIVE,NEUTRAL,POSITIVE,POSITIVE)(sentiment)
}
占用较少的角色,但我认为不是更好。
我会:检查可以创建此函数的sentiment
的范围,以及原始的范围,例如,如果它是6则抛出异常。
使用import Sentiment._
可以为您节省一些详细信息。