斯卡拉:“VAL”没有初始化

问题描述:

在Java中,我可以很容易地做这样的事情:斯卡拉:“VAL”没有初始化

final String str; 
if (p() == true) { 
    str = "foo"; 
} else { 
    str = "bar"; 
} 

如何归档在Scala中这样的事情?当然,“显而易见”是不可能的:

val str: String 
if (p) { 
    str = "foo" 
} else { 
    str = "bar" 
} 

是否有任何与我在Java中可以做的事情相当的东西?

+0

'var str:String =“”','val'是一个不可变的引用,'var'不是。 – 2014-11-03 21:56:42

+4

'val str = if(p)“foo”else“bar”'有什么问题? – 2014-11-03 21:57:03

+0

你也可以'var str:String = _',但是augh。 – 2014-11-03 21:57:57

鉴于Scala中的if-else块表达式,你可以使用他们喜欢的是:

val str = 
    if (p) "foo" 
    else "bar" 

这也有自动型的优势演绎相比,Java的语法。

+0

非常感谢!我还没有Scala中的一切是一个函数/表达式的思维方式:-( – Hannes 2014-11-03 22:08:45

+2

@Hannes请注意,如果你需要/需要,你也可以用大括号包装你的表达式并做更多的初始化操作。 – Nate 2014-11-03 22:10:19

+0

@Hannes not一切,例如进口 – 2014-11-04 08:55:13