如何在Groovy中重载in运算符?

7
def array = [1,2,3,4,5]
println 3 in array

打印出true,我需要重载哪些东西来支持对任何对象的in操作?

示例:

class Whatever {
   def addItem(item) {
      // add the item
   }
}

def w = new Whatever()
w.addItem("one")
w.addItem("two")
println "two" in w

我知道我可以将这个类使用的集合设置为公共的,但我更喜欢使用in


你能举个你想做的示例吗? - Pascal Thivent
3个回答

8

我在 Groovy 邮件列表中提问。 这里 是相关讨论的链接。答案是 isCase

class A
{
  def isCase(o) {
    return false;
  }
}

a = new A()
println 6 in a // returns false

好的。快速搜索后,看起来这里有文档:http://docs.codehaus.org/display/GROOVY/JN2535-Control#JN2535-Control-ConditionalStatements - Rob Hruska
我希望我能投票支持Guillaume Laforge的这个+1,毕竟他是在邮件列表上回答的。;-) - Leonel

2
您可以使Whatever实现Collection或Collection子接口。Groovy为Object提供了iterator()实现,对于作用于聚合对象的运算符,Groovy将尝试将Object转换为Collection,然后执行聚合函数。
或者,您可能能够使Whatever实现Iterable。我仍在寻找参考资料并编写一个概念验证来验证它。 Groovy迭代器模式文档可能表明这将起作用。

1
我想知道这是否可能,成员资格运算符(in)未列在运算符重载页面中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接