gpt4 book ai didi

scala - 如何将代码块传递给函数?

转载 作者:行者123 更新时间:2023-12-04 23:02:01 25 4
gpt4 key购买 nike

我正在尝试创建一个 试试如果在此代码块内发生异常,则重复代码块的子句模拟。

def retry(attempts: Int)(func: Unit => Unit) {

var attempt = 0
while (attempt < attempts) {
attempt += 1
try {
func()
} catch {
case _: Throwable =>
}
}
throw new Exception()
}

我希望它可以像这样使用
retry(10) { // I would like to pass this block as function
val res = someNotReliableOp(); // <- exception may occur here
print(res)
}

但它不起作用:
Operations.scala:27: error: type mismatch;
found : Unit
required: Unit => Unit
print(res)
^
one error found

将自定义 block 传递给我的函数的最简洁方法是什么?

最佳答案

你只需要稍微改变你的方法定义:

def retry(attempts: Int)(func: => Unit)
Unit => Unit表示:一个函数,其参数类型为 Unit并计算为 Unit .
=> Unit意思是:一个不带参数的函数,计算结果为 Unit .这称为 call by name .

关于scala - 如何将代码块传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169869/

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