Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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
相当于Python的Scala';s";在;集合的运算符?_Scala_Scala Collections - Fatal编程技术网

相当于Python的Scala';s";在;集合的运算符?

相当于Python的Scala';s";在;集合的运算符?,scala,scala-collections,Scala,Scala Collections,在Scala中,可以使用“包含”检查项是否是集合的成员: 然而,我想做一个类似的比较,但是项目放在第一位,场景放在最后(我知道这是一个次要的风格点)。我有一些Python方面的背景知识,所以我希望能与Python的in运算符类似: the_set = set([1, 2, 3, 4]) if 3 in the_set: print "The set contains 3!" 在Scala中有什么方法可以做到这一点吗?如果您感到好奇,我之所以要这样做,是为了编写一个简洁的if语句,将一个值与我构

在Scala中,可以使用“包含”检查项是否是集合的成员:

然而,我想做一个类似的比较,但是项目放在第一位,场景放在最后(我知道这是一个次要的风格点)。我有一些Python方面的背景知识,所以我希望能与Python的in运算符类似:

the_set = set([1, 2, 3, 4])
if 3 in the_set: print "The set contains 3!"
在Scala中有什么方法可以做到这一点吗?如果您感到好奇,我之所以要这样做,是为了编写一个简洁的if语句,将一个值与我构建的长集合进行比较。同时,我希望项目放在第一位,以便代码更易于阅读和理解


谢谢

以下是一个示例:

scala> implicit class InOperation[T](v: T) extends AnyVal { def in(s: Set[T]) = { s contains v } }
defined class InOperation

scala> val x = Set(1,2,3)
x: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> 2 in x
res0: Boolean = true

它用于将方法中的
添加到任意类型的
T
,并检查对象是否在集合中。

Scala集合具有方法
包含的
。所以,你可以这样使用它:

val x = Set(1,2,3)
x.contains(1) // True
x(1) // True
您还可以使用语法sugar并这样称呼它:

val x = Set(1,2,3)
x.contains(1) // True
x(1) // True

集合包含3个
似乎已经相当简洁了。我不认为_集合
中的
3更容易阅读。@Gangstead
中对于大型内联集合看起来更好(但是,是的,简单的解决方案是求助于变量定义)。@Gangstead:我同意变量定义可以工作。出于风格上的原因,我只是希望有一些更好的东西。(是的,我很肤浅)不幸的是,它在ScalaTest FlatSpec中呈现出模糊性,可以通过约束T或更聪明的东西来修复。用于移除运行时开销。非常好的答案!实际上,我以前使用过隐式类,对Scala的各个部分做了一些其他的小改动。尽管如此,我还是觉得像“in”操作符这样的东西应该作为标准库的一部分内置。你认为他们会接受补丁吗?@bnmith可能会,但我不这么认为。在您的DSL中有这样的东西是一件好事,Scala允许您在需要时实现它,但Scala的标准库已经建立了这样做的方法,我不太确定用另一种方法污染库是一个好主意(另外,我还记得标准库维护人员在一些会议上大肆鼓吹需要减少集合中几乎相同的方法的数量)。这是有争议的。@bnsmith x中的
2
x包含2
都是可读的,因此这是一种个人风格。Scala使用后者,因为它更适合其他函数。此外,IMHO,当它与其他函数结合使用时,例如:
if(List(1,2,3)map(*2)filter(>2)包含4)
这不是语法糖,这是
apply()
方法。上面说,“这个方法相当于contains。”OP知道
contains()
方法的所有内容,这在这个5年问题的顶部已经清楚地提到了。