を拡張する際にトレイトですでに定義された変数を再定義する必要がありますコンパイルエラーが発生します。のはなぜScalaの
答えて
形質をCompiler
で初期化しないためです。 Compile
を拡張する人は、が変数のように動作する何かをと定義することを期待しています。例えば
次が有効である:
class Example extends Compiler {
var _printInstruction = "foo"
def pritnInstruction = "I don't care about setter"
def pritnInstruction_=(pi: String) = _printInstruction = pi
}
あなたは
class JavaCompiler extends Compiler {
printInstruction = "System.out.print(arg0);"
}
を使用することができるようにしたい場合は、Compiler
トレイトであなたのVARを初期化:
trait Compiler {
var printInstruction: String = _
}
私はこの質問の著者ではありませんが、何か説明をお願いしますか? 'var printInstruction:String = _'のアンダースコアはどういう意味ですか? – dmitry
_は、変数の型に応じてデフォルト値で変数を初期化することを意味します。var x:Int = _はx = 0につながります。 'var y:String = _'はy = nullになり、以下同様です。 javaでの暗黙の初期化と同じです。ほとんどの場合、悪い習慣です。 – Nicolas
varがデフォルト値なしで定義されているとき、なぜエラーが発生しましたか?抽象的/未実装として扱われましたか? – dmitry
のオーバーライドvarsは一般的にあなたがしたいことではありません。あなたはがvar
ようを振る舞う何かをしたい、とさえするものであってもよい場合は、次の操作を行います。
trait Compiler {
def printInstruction: String
def printInstruction_=(s: String): Unit
}
class JavaCompiler {
var printInstructions = "System.out.print(arg0);"
}
はどういうわけか、私はそれはあなたが意図したものだとは思いません。だからあなたが実際に達成しようとしていることを説明しないでください。
そのスピンはhttp://stackoverflow.com/questions/9033253/is-this-the-正確な変換方法 - Java-interface-into-scala/9034680#9034680そこには、元の問題に対する最良の解決策があります。これはコンパイラが未定義のままにしておくと、私のためにvarを定義することを選択しなかった理由の単なる質問でした。 – Farmor
- 1. Scala - なぜプライベートメンバー
- 2. は、なぜ私がこのScalaで
- 3. Scalaがjava.lang.StackOverflowErrorをキャッチしないのはなぜですか?
- 4. Scalaにシンボルが必要なのはなぜですか?
- 5. ScalaはScalaの
- 6. Scalaでは、なぜ 'オブジェクト'だけでなく 'ケースオブジェクト'ですか?
- 7. Scalaが_の型を推論できないのはなぜですか?
- 8. Scalaのthis.apply(_)で「apply」を省略できないのはなぜですか?
- 9. Scala-Play:フォームのデフォルト値が選択されないのはなぜですか?
- 10. ScalaでRegexのパターンマッチングが動作しないのはなぜですか
- 11. 私のScala列挙が機能しないのはなぜですか?
- 12. Scalaのパターンマッチングが変数で機能しないのはなぜですか?
- 13. なぜScalaでdefで省略可能なのですか
- 14. Scala - Sparkワードカウント、なぜ動作しないのですか?
- 15. "flatMap"はScalaのOptionタイプのシーケンスで動作するのはなぜですか?
- 16. List [Int、Int]が有効なScala型でないのはなぜですか?
- 17. は、純粋なScalaの環境ではScalaの
- 18. ScalaがScalaのバージョンをライブラリに追加する必要があるのはなぜですか?
- 19. は、Scalaの動的なコードスニペット
- 20. なぜScalaはNodeSeqはまた、私はこのエラーを得続けるGenTraversableOnce
- 21. Scalaが特性型パラメータを推定しないのはなぜですか?
- 22. intellijにscalaワークシートオプションが表示されないのはなぜですか?
- 23. Scalaでは、なぜGregorianCalendarでgetInstanceが機能しないのですか?
- 24. ScalaでStringとIntを連結できないのはなぜですか?
- 25. なぜ私のScalaのテール再帰はwhileループより速いのですか?
- 26. ないScalaの
- 27. なぜscalaはcom.vaadin.ui.MenuBar.MenuItemを認識しません
- 28. なぜScalaはシャドー変数をサポートしていますか?
- 29. Scalaは、なぜ私が推定されるタイプ
- 30. なぜ私はscalaでインクリメントできませんか?
オーバーライドを書かないでください。var printInstruction = "System.out.print(arg0);"?あなたはJavaCompilerのプロパティをオーバーライドしています – dmitry
'printInstruction'は抽象的であるため、必須ではありません。' 'override'modifierなしで定義できます。 'override'を追加するのは良い方法であると考えている人もいます。 – Nicolas