1

このコードは、SBT 0.7.x シリーズ (この場合は 0.7.7) でのみコンパイルされますが、SBT 0.11.x シリーズ (この場合は 0.11.3) ではコンパイルされません。どちらの場合も、同じ Scala 2.9.x シリーズ (2.9.1) を使用する

SBT 0.11.3 はパラメータの型を推測できないようです。エクリプスもできません。私の推測では、コーディングに問題があると思います。それともSBT回帰ですか?

(現時点では、Scala プラグインの「不安定な」バージョンで Eclipse 4.2 を使用しています。ただし、Eclipse 3.7 とプラグインの「安定した」バージョンでも同じエラーが発生します。)

// either using the "override" reserved keyword or not, this code will compile with SBT 0.7.7 but not with 11.3


 sealed trait FacetJoin[T1, T1S, T2S] {
    def facetJoin (a: T1S, b: T1S
      , fVals: (T1, T1) => T2S
      , fFacets: (Formula, T1S, T1S, Formula, T1S, T1S) => T2S
      , fBothL: (T1S, Formula, T1S, T1S) => T2S
      , fBothR: (Formula, T1S, T1S, T1S) => T2S
      , fOther: (T1S, T1S) => T2S): T2S
  }
  object FacetJoin {
    implicit object BoolBoolFacetJoin
    extends FacetJoin[Boolean, Formula, Formula] {

// Eclipse complaint for next line: 
//// Multiple markers at this line
////    - only classes can have declared but undefined 
////     members
////    - ':' expected but ',' found.

      override def facetJoin (a, b, fVals, fFacets, fBothL, fBothR, fOther): Formula = {
 ...

// Eclipse complaint for next line: 
//// Multiple markers at this line
////    - identifier expected but '}' 
////     found.
////    - not found: type <error>
        }
      }
    }
 }
4

1 に答える 1

2
def facetJoin (a, b, fVals, fFacets, fBothL, fBothR, fOther): Formula 

Scala では、パラメーターの型を指定せずにメソッドを定義することはできません。これは、どの Scala バージョンでもコンパイルできませんでした。また...、ここに何かを残していることも示しています。完全に自己完結した例を提供するようにしてください (例: add trait Formula)。型を入れると、問題なくコンパイルされます。

trait Formula

sealed trait FacetJoin[T1, T1S, T2S] {
  def facetJoin (a: T1S, b: T1S
    , fVals: (T1, T1) => T2S
    , fFacets: (Formula, T1S, T1S, Formula, T1S, T1S) => T2S
    , fBothL: (T1S, Formula, T1S, T1S) => T2S
    , fBothR: (Formula, T1S, T1S, T1S) => T2S
    , fOther: (T1S, T1S) => T2S): T2S
}
object FacetJoin {
  implicit object BoolBoolFacetJoin
  extends FacetJoin[Boolean, Formula, Formula] {

  override def facetJoin (a: Formula, b: Formula
    , fVals: (Boolean, Boolean) => Formula
    , fFacets: (Formula, Formula, Formula, Formula, Formula, Formula) => Formula
    , fBothL: (Formula, Formula, Formula, Formula) => Formula
    , fBothR: (Formula, Formula, Formula, Formula) => Formula
    , fOther: (Formula, Formula) => Formula): Formula = sys.error( "TODO" )
    }
 }
于 2012-08-16T17:35:50.947 に答える