scala - 从同一 scala 类中的另一个变量引用一个变量
问题描述
我有一个像下面这样的 scala 类
class Event {
val query: String =
s"""
| Created >= "2020-01-01" AND ${event_filter}
| """
.stripMargin
val event_filter: String =
s"""
| event= 'CreateTask'
| """
.stripMargin
}
然后我有一个下面的测试类来测试事件查询。
class EventTest extends FunSuite{
test ("testing event query") {
val obj:Event = new Event()
assert(obj.query == "Created >= \"2020-01-01\" AND event= \"CreateTask\" ")
}
}
在运行测试用例时,我发现实际值和预期值不匹配。我得到像这样的 obj.query “Created >= “2020-01-01” AND null”。
知道为什么 event_filter 被填充为 null 吗?是因为变量是延迟加载的吗?
解决方案
如评论中所述,这是初始化顺序的问题。您可以通过重新排序val
s 或创建第一个值来解决此问题,lazy val
以便在第一次使用它之前不会对其进行评估,这将是在第二个初始化之后。
class Event {
val event_filter: String =
s"""
| event= 'CreateTask'
| """
.stripMargin
val query: String =
s"""
| Created >= "2020-01-01" AND ${event_filter}
| """
.stripMargin
}
或者
class Event {
lazy val query: String =
s"""
| Created >= "2020-01-01" AND ${event_filter}
| """
.stripMargin
val event_filter: String =
s"""
| event= 'CreateTask'
| """
.stripMargin
}
推荐阅读
- excel - 如何将变量设置为表副本?
- php - Http 504 网关超时 Apache 2.4.6
- c# - JQuery选择重复下拉
- go - go get: 被 -mod=vendor 禁用
- r - 如何使用 ggplot 从数据框中绘制几行?
- c++ - 在一行中初始化指针(new uint8_t[height * width*3])
- reactjs - Styled-Components 的扩展规则不起作用
- php - 在图像中插入文本在 PHP 中不起作用
- scala - 如何仅将一些字段插入配置单元表,重用现有的表模式?
- arrays - 年龄为 18 岁至 30 岁且为男性/女性时使用 CountUnique