私はScalaの関数型プログラミングに関するCourseraコースに従っており、ワークシートreplの奇妙な振る舞いに沿っています。途中で Intellijワークシートとそれで定義されているクラス
右に次のような結果与えるべき次のコードでのワークシート:私は何を得るobject rationals {
val x = new Rational(1, 2) > x : Rational = [email protected]<hash_code>
x.numer > res0: Int = 1
y. denom > res1: Int = 2
}
class Rational(x: Int, y: Int) {
def numer = x
def denom = y
}
が
object rationals { > defined module rationals
val x = new Rational(1, 2)
x.numer
y. denom
}
class Rational(x: Int, y: Int) { > defined class Rational
def numer = x
def denom = y
}
だけ私が得たobject
にclass
を移動した後であるがコードと同じ結果になります。
- これはIntellijによって引き起こされたのですか、Scalaに変更がありましたか?
- 他の方法がありますか?
で評価されます
のようないくつかのオブジェクト内の、このような行を折り返します。オブジェクトの外側に 'val'sとエクスプレッションを書くだけです。 – Odomontois
@Odomontois Ok、それは動作します。しかし、私はまだ彼のポイントが何かを見ていないのですか? – Lukasz
いくつかの 'val'の定義は時々順序付けられた方法で評価されるべきではありません。 'オブジェクト'がまだ完全に初期化されていないため、 'lazy val'または' .toString'ステージでスローされる例外の間に複雑な依存関係が存在する可能性があります。 IDEAではオブジェクトのような厄介なものをラップすることができます。Eclipseでは別のオプションがありません。別の.scalaソースで抽出してください。 – Odomontois