2

正常に動作していた Scala クラス内でコードを変更しました。変更をコンパイルしようとすると、コンパイラは次の (既存の) コード行に関連するエラー メッセージ「値 to は Int のメンバーではありません」を吐き出します。

for (i <- 0 to cColumn -1) { ... }

いくつかの調査を行うと、「to」メソッドに関するいくつかのバグレポートに出くわしました-また、「to」は明らかにintWrapperクラス内で提供されるメソッドです(?)。

したがって、その情報に基づいて、クラスのインポートステートメントを調べ始めました... intWrapper にはそのようなインポートはありません。(Q: では、そもそもこれはどのようにコンパイル/実行されたのでしょうか?) (私にとって) さらに興味深いのは、そのインポートのコードベースでグローバル検索を開始したときに、誤って終了してしまったことです。コンパイラ(sbt)セッション...しかし、再起動すると、クラスは正常にコンパイルされました。エラーはまったくありません。(そして、前のセッションからのコードの変更はありません)

この断続的な動作の原因について何か考えがある人はいますか?

注:
1) javac 1.7.0_25 で Scala 2.10.2 を使用する
2) クラスへのコード変更は、サンプル機能とは何の関係もなく、クラスのインポートも変更しませんでした

更新:変数宣言は次のとおりです。

val meta = rs.getMetaData()
val cColumn = meta.getColumnCount()

編集:提案ごとに、ここにテスト行があります (現在はすべて正常にコンパイルされます):

implicitly[scala.Int => scala.runtime.RichInt]
intWrapper(3) to 4
for (i <- 0 to 33 -1) { /* do something smart */ }

for (i <- 0 to cColumn -1) { ... }

EDIT 2完全なコンパイラエラーは次のとおりです。

[error] /path/to/src/file/DBO.scala:329: value to is not a member of Int
[error]       for (i <- 0 to cColumn -1) {
[error]

そのエラーは、クラスで最大 18 回繰り返されていました。(これは DBO-DB インターフェース層です); ここで、DBO.scala は、新しく変更された特性を含むファイルです。

4

3 に答える 3

1

そもそもこれはどのようにコンパイル/実行されたのですか?

デフォルトでは、 の内容scala.Predefがインポートされます。with メソッドintWrapperを生成するメソッドがあります。RichIntto

あなたはおそらく影付きのシンボルを持っていますintWrapper。次の作業を行います:

implicitly[scala.Int => scala.runtime.RichInt]

またはこれ:

intWrapper(3) to 4

...そうでない場合は、問題があります。


編集:だから、コンパイルすると言うので、何が起こるかはcColumn定数に置き換えることです。

for (i <- 0 to 33 -1) { ... }

? 示された行などを含む完全なコンパイラ メッセージを投稿することも役立ちます。

于 2013-08-14T18:51:57.653 に答える
1

Rangeそのエラーがどこから来たのかわからない場合は、手動で構築して回避することもできます。

for (i <- Range.inclusive(0, cColumn-1)) { ... }

また

Range.inclusive(0, cColumn-1).foreach { i => ... }
于 2013-08-14T20:24:34.573 に答える