[解決済み] scala のコンストラクタのパラメータはデフォルトで private val になりますか?
2022-06-23 11:25:39
質問
試行錯誤しています。
class Foo(bar: Int)
vs:
class Foo(private val bar: Int)
で、これらは同じように動作するようです。
(bar:
Int)
に展開されます。
(private val bar: Int)
ということで、私の質問は、これらは
同じか類似しているかということです。
余談ですが、私は今まで
-Xprint:typer
を使ってみましたが
2番目の行が追加された以外は、同じコードが生成されます。どうすれば
その余分な行を読むには?
..
class Foo extends scala.AnyRef {
<paramaccessor> private[this] val bar: Int = _;
def <init>(bar: Int): this.Foo = {
Foo.super.<init>();
()
}
}
..
..
class Foo extends scala.AnyRef {
<paramaccessor> private[this] val bar: Int = _;
<stable> <accessor> <paramaccessor> private def bar: Int = Foo.this.bar;
def <init>(bar: Int): this.Foo = {
Foo.super.<init>();
()
}
}
..
どのように解決するのですか?
bar: Int
これはほとんどコンストラクタのパラメータではありません。この変数がコンストラクタ以外の場所で使用されない場合、そのまま残ります。フィールドは生成されません。そうでなければ
private val bar
フィールドが作成され
bar
パラメータの値が代入される。ゲッターは作成されません。
private val bar: Int
このようなパラメータの宣言は
private val bar
フィールドが作成されます。この挙動は、パラメータがコンストラクタの横で使われたとしても (例えば
toString()
の中で)使用されたかどうかに関係なく、この動作は上記と同じです。
val bar: Int
上記と同じですが、Scalaのようなゲッターはpublicです。
bar: Int
の場合、クラスは
ケースクラスが含まれる場合、デフォルトでは各パラメータに
val
修飾子を持ちます。
関連
-
[解決済み] Scala forallの例?
-
[解決済み] Seq[Future[Person]]ではなく、Future[Seq[Person]]を取得する方法
-
[解決済み] Spark - Sparkでパーセンタイルを計算する方法は?
-
[解決済み] Scala マップ foreach
-
[解決済み] ScalaのバージョンをScala本体から取得するにはどうしたらいいですか?
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] Scalaでファイル全体を読む?
-
[解決済み】Scalaのvarとvalの定義の違いは何ですか?
-
[解決済み】ScalaのHigher kinded typeとは何ですか?
-
[解決済み】Scala 2.8における<:<、<%<、=:=の意味と、それらのドキュメントはどこにあるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Scalaでステートメントの間にN秒待つには?
-
[解決済み] Scalaで「:+」は何を意味するのか
-
[解決済み] MapのmapValuesとtransformの違いについて
-
[解決済み] Spark - CSVファイルをDataFrameとして読み込む?
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み] スカラズのイテレート。「より大きな」モナドのために `EnumeratorT` を `IterateeT` にマッチングさせる「リフティング」。
-
[解決済み】case objectとobjectの違いについて
-
[解決済み】レイジーバルって何するもの?
-
[解決済み] Build.scala、%および%%の記号の意味
-
[解決済み] Spark SQLでカラムの降順でソートするには?