例如:
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
ShortenerContext db)
{
db.Database.Migrate();
//Rest omitted
}
显然scala中没有def validate(input) = {
if (conditionA(input)) {
return A
}
if (conditionB(input)) {
return B
}
if (conditionC(input)) {
return C
}
continueProcess(input)
}
,那么上面有什么替代方案呢?
答案 0 :(得分:2)
为了避免多个退出点,总是存在一个你愿意容忍多少缩进的问题。
def validate(input) = {
if (conditionA(input)) A
else if (conditionB(input)) B
else if (conditionC(input)) C
else {
continueProcess(input)
}
}
作为一般规则,因为FP鼓励“纯粹”功能(没有副作用,并且对于给定的输入总是相同的输出),所以需要单个出口点。
答案 1 :(得分:1)
使用匹配
def validate(input) = (conditionA(input), conditionB(input), conditionC(input)) match {
case (true, _, _) => A
case (false, true, _) => B
case (false, false, true) => C
case (false, false, false) => continueProcess(input)
}
答案 2 :(得分:0)
return
在Scala中可用,但它不是惯用的。而是使用以下替代方案之一:
只需使用匹配:
def validate(input) = {
val result = input match {
case x if conditionA(x) => A
case x if conditionB(x) => B
case x if conditionC(x) => C
}
continueProcess(input)
result
}
此外,Scala尝试将所有内容都设为表达式,因此if
也是一个表达式。你也可以写:
def validate(input) = {
val result = if (conditionA(x))
A
else if (conditionB(x))
B
else if (conditionC(x))
C
else
???
continueProcess(input)
result
}