Reputation: 45
Scala 2.12
What is wrong with my implementation?
object MyJob extends DatasetReader(x=x) {
val x = "aaa"
DatasetReader.read()
}
class DatasetReader(x: String) {
object DatasetReader {
def read(): String = {
// ...
}
}
}
error:
super constructor cannot be passed a self reference unless parameter is declared by-name
How to fix it?
Upvotes: 0
Views: 141
Reputation: 51703
Try
val x = "aaa"
object MyJob extends DatasetReader(x=x) {
DatasetReader.read()
}
https://scastie.scala-lang.org/DjB31943QxujtmfrzLa3tg
I guess you can do what you want with early initializer
object MyJob extends {
val x = "aaa"
} with DatasetReader(x=x) {
DatasetReader.read()
}
https://scastie.scala-lang.org/r6FYtxXeT1SFcFHX6KFM1A
Please notice that early initializers are deprecated in Scala 3
http://dotty.epfl.ch/docs/reference/dropped-features/early-initializers.html
Upvotes: 1
Reputation: 8539
Another option you have is:
object MyJob extends {
val x = "aaa"
} with DatasetReader(x) {
DatasetReader.read()
}
Code run at Scastie.
There are similar post in StackOverflow, issue in github, and a bug in Scala.
Upvotes: 2