2012-04-27 45 views
0

我目前放在一起下面的代码,它识别元素,据称其添加到组,但是当我打印出来的设置集充满了功能Scala中的对象上访问一组

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

回答

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