Scala';s查找输入是否为集合成员的方法
问题很简单。用Java术语来说,函数是一个字符串;如果字符串为null,则返回false;否则返回字符串的大写字母是否在某个固定的集合中。比如说:Scala';s查找输入是否为集合成员的方法,scala,Scala,问题很简单。用Java术语来说,函数是一个字符串;如果字符串为null,则返回false;否则返回字符串的大写字母是否在某个固定的集合中。比如说: static boolean inSet(String s) { return (s != null) && StaticSet.contains(s.toUpperCase()); } 我想用这个例子来说明在Scala中如何更具可读性。这是我的 object MisspelledColour { val StaticS
static boolean inSet(String s) {
return (s != null) && StaticSet.contains(s.toUpperCase());
}
我想用这个例子来说明在Scala中如何更具可读性。这是我的
object MisspelledColour {
val StaticSet = Set("RED", "BLEW", "GRENE")
def inSet(s : Option[String]): Boolean = {
s map { StaticSet contains _.toUpperCase } getOrElse false
}
def main(args: Array[String]) {
println(inSet(None));
println(inSet(Some("blew")));
println(inSet(Some("blue")));
}
}
我想要的是比s map{StaticSet contains{uuu.toUpperCase}getOrElse false
更美观的东西,它可以更好地展示Scala的优势。这个怎么样:
scala> val StaticSet = Set("RED", "BLEW", "GRENE")
StaticSet: scala.collection.immutable.Set[String] = Set(RED, BLEW, GRENE)
scala> def inSet(s: Option[String]): Boolean = s.fold(false)(x => StaticSet(x.toUpperCase))
inSet: (s: Option[String])Boolean
scala> inSet(None)
res0: Boolean = false
scala> inSet(Some("blew"))
res1: Boolean = true
或者这个:
scala> def inSet(s: Option[String]): Boolean = s.exists(x => StaticSet(x.toUpperCase))
inSet: (s: Option[String])Boolean
scala> inSet(None)
res2: Boolean = false
scala> inSet(Some("blew"))
res3: Boolean = true
我的变体:
def inSet(op:Option[String]) = op.map(_.toUpperCase).exists(StaticSet)
哈哈。完美的我完全忘记了一个明显真实的事实,即集合是一个谓词(我从来不知道exists(),但我认为它适用于每个集合)。或者
StaticSet.contains
,如果你想更明确的话。@AlexeyRomanov--我们正在进入品味的领域,但我喜欢“exists(Set)”所暗示的方式,有点误导性,“存在于集合中”。