Last active
August 29, 2015 13:56
-
-
Save ponkotuy/9225301 to your computer and use it in GitHub Desktop.
補助コンストラクタでなぜかcompileできないパターン
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Main extends App { | |
val hoge = new Hoge() | |
println((hoge.hoge, hoge.fuga)) | |
} | |
class Hoge(val hoge: Int, val fuga: Int) { | |
import Hoge._ | |
def this() = this(init, init) // Compile Erorr! not found init | |
} | |
object Hoge { | |
val init = 1 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Main extends App { | |
val hoge = new Hoge() | |
println((hoge.hoge, hoge.fuga)) | |
} | |
class Hoge(val hoge: Int, val fuga: Int) { | |
def this() = { | |
import Hoge._ // Compile Error! this expected but import found | |
this(init, init) | |
} | |
} | |
object Hoge { | |
val init = 1 | |
} |
あースコープがそもそも違うという話ですか…分かり辛いですね…。
そうすると今書いたMain2とかはどうでしょう
と思ったけど補助コンストラクタ内部では最初にコンストラクタ呼び出さないといけないという話でした思い出しましたw
そもそもサブコンストラクタでは他のサブコンストラクタかプライマリコンストラクタを呼ぶしかできないはずです。
処理はイニシャライザに書いて全コンストラクタが通るようにするべきなので。
あれ、嘘つきましたね。 this 先に呼び出せば処理かけますね。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
これならコンパイル通りますね。
import が primaryコンストラクタ内というかインスタンスイニシャライザの中なので、コンストラクタからはinitがスコープ外になっているのでは?