Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala';s查找输入是否为集合成员的方法_Scala - Fatal编程技术网

Scala';s查找输入是否为集合成员的方法

Scala';s查找输入是否为集合成员的方法,scala,Scala,问题很简单。用Java术语来说,函数是一个字符串;如果字符串为null,则返回false;否则返回字符串的大写字母是否在某个固定的集合中。比如说: static boolean inSet(String s) { return (s != null) && StaticSet.contains(s.toUpperCase()); } 我想用这个例子来说明在Scala中如何更具可读性。这是我的 object MisspelledColour { val StaticS

问题很简单。用Java术语来说,函数是一个字符串;如果字符串为null,则返回false;否则返回字符串的大写字母是否在某个固定的集合中。比如说:

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)”所暗示的方式,有点误导性,“存在于集合中”。