gpt4 book ai didi

scala - Scala 中的自定义控制结构?

转载 作者:行者123 更新时间:2023-12-05 01:31:14 25 4
gpt4 key购买 nike

在用 Java 或 C++ 编程时,我多次遇到过一个简单的模式,其中自定义控制结构可以减少我代码中的样板。它是这样的:

 if( Predicate ){
Action

return Value
}

也就是说,一个“return if”类型的语句。我试过用签名来制作函数,比如 foo[A,B]( pred:((A,A)=>Boolean), value:Option[B] )但随后我会检查我是否返回了 Some 或 None 。我被 return 绊倒了陈述。

是否有一种继承方式可以用函数式语言或更具体地说是 Scala 来制作这样的控制结构?

编辑:

我的描述不是很清楚,这让试图帮助我的人感到困惑。关键原因我的 foo不起作用的是它不能短路包含函数的评估。那是
def intersect( geometry:Geometry, reference:Geometry ):Geometry = {
return_if( withinBounds( geometry, projection ), logToString( logger, "Geometry outside " + projection.toString ), EmptyGeometry() )
return_if( topologicallyCorrect( geometry ), intersect( correct( geometry ), reference )
//rest of the function
}

并且仍然允许在 return_if 内进行尾递归.

最佳答案

我会使用偏函数:

def whatevs[A, B](options : PartialFunction[(A,A), B]) : Option[B] = {
val myInput = generateInput
if(options.isDefined(myInput)) {
Some(options(myInput))
} else None
}

那么您的用法可能如下所示:
whateves {
case (x,y) if x > y => "Biggerz"
case (x,y) if y > x => "Tiny!"
}

通常,您不需要 return 语句。 If-expression 将计算为每个块中使用的最后一个表达式。您可能需要帮助编译器找出 if 表达式的类型结果,但不需要返回。

偏函数是一种在某些条件成立时执行操作的机制。在上面,两个条件是 x > y 或 y > x 来自元组。

如果 whatevs 函数不是你所说的,我建议使用原始模式匹配。

关于scala - Scala 中的自定义控制结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3575780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com