0

我目前已经将以下代码放在一起确实可以识别元素并据称将它们添加到集合中,但是当我打印出集合时,集合中充满了函数

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,则表示我返回了错误类型的对象。有任何想法吗?

4

1 回答 1

3

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

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

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

接下来,如果要定义一个新的 empty 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
于 2012-04-27T04:41:46.370 回答