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

ここにはいくつかの問題があります。いくつか挙げてみます。これらを修正すると、軌道に乗るはずです。

まず、Names2 つの異なる方法で定義していますが、これは良くありません。タイプにするつもりだったようですので、そのままにしておいてください。

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
于 2012-04-27T04:41:46.370 に答える