【发布时间】:2019-01-28 16:44:00
【问题描述】:
这是代码结构:
case class Demo(path:String){
private val df: DataFrame = read()
var a = df.columns(0)
var b = df.columns(1)
var str = df.select("some").toJSON
def read(): DataFrame {/* code to read from path and return a dataframe*/}
}
这是读取全局变量的糟糕方式,因为它们依赖于df 的值。我想删除这个依赖,但同时,不要调用 read 方法三次。
在 Java 中,我会在构造函数中调用 read 方法并在那里定义全局变量的值。我怎样才能在 Scala 中做同样的事情?看来我无法从辅助构造函数调用 read 方法。也欢迎任何其他/更好的方法。
【问题讨论】:
-
在声明
dfval 并将所有这些 vars 更改为 vals 时放置读取逻辑有什么问题乙>? - 我想我不太明白你的问题,如果我遗漏了什么,你能解释一下吗?同样在 Scala 中,类的主体是它的构造函数,因此......与什么没有太大区别你会在 Java 中做。 -
@LuisMiguelMejíaSuárez 问题在于定义
df的行总是需要高于a、b和str。我有一个插件,它在下面重构df一些行,然后在运行时得到 NullPointerException。 -
@smaug 将
val df更改为lazy val df。然后可以在任何地方定义 -
您应该针对自动格式化程序提交一个错误并/或停止使用它。
标签: java scala oop constructor