如何从特质中获得恒定值?

Fre*_*ind 3 scala constants traits

RequireLogin用常量定义了一个特征:

trait RequireLogin {
    val message = "you should login"
    if(sessionUser.isEmpty) {
        Global.error(message)
        throw new RedirectException("/login", message);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在我的测试中,我创建了一个具有此特征的对象,并测试 是否Global.error()等于RequireLogin.message

try {
    new Object with RequireLogin
} catch {
    case _: RedirectException =>
}
Global.error should be === RequireLogin.message // !!! can't be compiled
Run Code Online (Sandbox Code Playgroud)

但无法编译。

有什么方法可以从特征中获取常数吗?或者如何重构我的代码以使其更好?

fre*_*oma 6

我想到的是定义一个保持常量的伴随对象:

object RequireLogin {
    val message = "you should login"
}
Run Code Online (Sandbox Code Playgroud)

不确定这是否是您正在寻找的,但我认为如果不使用反射,您将无法从特征本身中获取价值。