在scala中访问对象上的集合

时间:2012-04-27 04:33:32

标签: scala types set

我目前整理了以下代码,它们识别元素并据称将它们添加到集合中但是当我打印出集合时,集合中充满了函数

class PropositionOrderer extends Identity{
    var Names = SortedSet[Name] _
    override def variable = {
      _ match {
        case name => 
          Names+(name)
          Variable(name)
      }
    }
}

我想在命题上调用它,并在命题

中获取已排序的名称列表
type Names = SortedSet[Name]
  val Names = SortedSet[Name] _
  def vars: Proposition => Names =
  {
    case p => 
      val prop = new PropositionOrderer
      prop.visit(p)
      println(prop.Names)
      //this just to fit the return definition
      Names("Dan","Web")
  }

如果我返回prop.Names,它说我正在返回错误类型的对象。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这里有几个问题。我会列出一些。纠正这些应该会让你走上正轨。

首先,您以两种不同的方式定义Names,这是不好的。看起来你认为它是一种类型,所以坚持下去。

type Names = SortedSet[Name]   // this defines a new type called `Names`
val Names = ...                // this defines a variable called `Names`

接下来,如果要定义一个新的空SortedSet,语法如下。 (请注意,变量名应始终为小写。大写字母为类型名称保留。)

val names = SortedSet[Name]()   // `names` is a new `SortedSet`
val Names = SortedSet[Name] _   // `Names` is a function that takes multiple `Name` arguments and constructs a `SortedSet`

第三,如果您要向Set添加内容,则必须使用+=,否则现有的设置不会更改。

var names = SortedSet[String]()
names + "test"   // `names` is unchanged
names += "test"  // `names` is updated