7

クラスを、特性を持つContextItemJavaクラスの拡張として定義したいと思います。PredicateConfidence

Confidence は、それが拡張するものに信頼フィールドを追加するだけの単純な特性です。

trait Confidence{
  def confidence:Double
}

私はContextItem単に次のように述べるだけで自分のクラスを定義しています:

class ContextItem extends Predicate with Confidence{}

しかし、これをコンパイルしようとすると...

com/slug/berds/Berds.scala:11: error: overloaded method constructor Predicate with     alternatives:
  (java.lang.String,<repeated...>[java.lang.String])com.Predicate <and>
  (java.lang.String,<repeated...>[com.Symbol])com.Predicate <and>
  (java.lang.String,java.util.ArrayList[com.Symbol])com.Predicate <and>
  (com.Predicate)com.Predicate <and>
  (com.Term)com.Predicate <and>
  (java.lang.String)com.Predicate
 cannot be applied to ()
class ContextItem(pred:Predicate) extends Predicate with Confidence{
             ^

これは些細な例のように思えますが、何が間違っているのでしょうか?

述語 (私のものではありません) は次のようになります。

/** Representation of predicate logical form. */
public class Predicate extends Term implements Serializable {
    public Predicate(String n) {
        super(n);
    }
    public Predicate(Term t) {
        super(t);
    }
    public Predicate(Predicate p) {
        super((Term)p);
    }
    public Predicate(String n, ArrayList<Symbol> a) {
        super(n, a);
    }
    public Predicate(String n, Symbol... a) {
        super(n, a);
    }
    public Predicate(String n, String... a) {
        super(n, a);
    }
    @Override
    public Predicate copy() {
        return new Predicate(this);
    }
}

Predicate もその祖先も信頼を実装していません。

4

1 に答える 1

6

のすべてのコンストラクターがリストされておりPredicate、それらのいずれも使用していないことが通知されていると思います。デフォルトでは、ここには存在しないパラメーターなしのコンストラクターを使用します。たとえば、(String)スーパーコンストラクターを呼び出す構文は次のようになります。

class ContextItem extends Predicate("something") with Confidence

また

class ContextItem(str: String) extends Predicate(str) with Confidence

また、現時点では yourdef confidenceは抽象メソッドであるため、定義を与えるまでコンパイルされません。書き込み可能なフィールドを追加するトレイトを意図している場合は、confidence代わりにこれが必要です。

var confidence: Double = 0.0
于 2013-04-17T21:00:00.480 に答える